Я пытаюсь извлечь значения из json-данных, чтобы отображать детали в таблице. У меня есть два json-объекта следующим образом. Мне нужно получить имена и скрипты из объекта secong json, передав jobid из первого объекта json.that все работают нормально.
var recent= [{
"jobid": "4",
"browser": "FF20",
"names": "[email protected]",
"datetime": "Thu Oct 03 2013 13:41:06 GMT+0530 (IST)",
"_id": "524d269a6d32804512000001"
}, {
"jobid": "34",
"browser": "GC23",
"names": "[email protected]",
"datetime": "Thu Oct 03 2013 13:41:47 GMT+0530 (IST)",
"_id": "524d26c36d32804512000002"
}, {
"jobid": "34",
"browser": "IE8",
"names": "[email protected]",
"datetime": "Thu Oct 03 2013 13:41:50 GMT+0530 (IST)",
"_id": "524d26c66d32804512000003"
}, {
"jobid": "34",
"browser": "FF20",
"names": "[email protected]",
"datetime": "Thu Oct 03 2013 13:41:53 GMT+0530 (IST)",
"_id": "524d26c96d32804512000004"
}, {
"jobid": "34",
"browser": "GC23",
"names": "[email protected]",
"datetime": "Thu Oct 03 2013 13:41:55 GMT+0530 (IST)",
"_id": "524d26cb6d32804512000005"
}]
второй объект josn
var data = {
"_id": ObjectId("524507068d8f5f6eee8bc602"),
"id": "86",
"names": "jhkujiyo",
"script": "art-pagination"
} {
"_id": ObjectId("524508788d8f5f6eee8bc605"),
"id": "79",
"names": "koiuo",
"script": "panini-main-flow"
} {
"_id": ObjectId("52450a0f8d8f5f6eee8bc606"),
"id": "34",
"names": "ioiuo",
"script": "panini-silk-flow"
} {
"_id": ObjectId("524a4f4cc973602da0d4ee10"),
"id": "4",
"names": "tuesdat val",
"script": "art-pagination"
}
Но моя проблема заключается в том, что я получаю данные таблицы только тогда, когда я предупреждаю, например: alert(k)
или что-то в этом роде. Без предупреждения все, что testname and testscript
таблицы отображается undefined
var name=[],script=[];
function recentTests() {
var k = 0;
$('#recentTest').html('');
var recentlist = "<table class='tablestyle'><tr><th class='thstyle' >Browser</th><th class='thstyle' >Test Name</th><th class='thstyle' >TestScript</th><th class='thstyle' >User</th><th class='thstyle' >Date</th></tr>";
// alert("Recent-----------"+JSON.stringify(recent));
recent.forEach(function (result) {
var params = {
"id": result.jobid
};
$.get('/getJobs', params, function (data) {
**alert("data-----------" + JSON.stringify(data));// the above json data object is getting from db...so i staticly put**
data.forEach(function (value) {
script.push(value.script);
name.push(value.names);
});
});
alert(k)
recentlist += '<tr><td class="tdstyle">' + result.browser + '</td><td class="tdstyle">' + script[k] + '</td><td class="tdstyle">' + name[k] + '</td><td class="tdstyle">' + result.names + '</td><td class="tdstyle">' + result.datetime + '</td>'
k++;
});
recentlist += '</table>';
$('#recentTest').html(recentlist);
}
Кроме того, мой первый json содержит повторяющееся значение jobid, поэтому $.get('/getJobs', params, function (data) {...
называется несколько раз. Как его можно избежать??? http://jsfiddle.net/GXVpa/3/
Это из-за асинхронного характера запроса ajax, любой код, который обрабатывает данные ответа ajax, должен быть добавлен в обратный вызов успеха
var name = [],
script = [];
function recentTests() {
var recentlist = $("<table class='tablestyle'><tr><th class='thstyle' >Browser</th><th class='thstyle' >Test Name</th><th class='thstyle' >TestScript</th><th class='thstyle' >User</th><th class='thstyle' >Date</th></tr></table>");
// alert("Recent-----------"+JSON.stringify(recent));
recent.forEach(function (result) {
var params = {
"id": result.jobid
};
$.get('/getJobs', params, function (data) {
data.forEach(function (value) {
script.push(value.script);
name.push(value.names);
recentlist.append('<tr><td class="tdstyle">' + result.browser + '</td><td class="tdstyle">' + value.script + '</td><td class="tdstyle">' + value.names + '</td><td class="tdstyle">' + result.names + '</td><td class="tdstyle">' + result.datetime + '</td>')
});
});
});
$('#recentTest').empty().append(recentlist);
}
Подробнее: Прочтите это
Обновить
function recentTests() {
var jobMap = {};
var recentlist = $("<table class='tablestyle'><tr><th class='thstyle' >Browser</th><th class='thstyle' >Test Name</th><th class='thstyle' >TestScript</th><th class='thstyle' >User</th><th class='thstyle' >Date</th></tr></table>");
// alert("Recent-----------"+JSON.stringify(recent));
recent.forEach(function (result) {
if (jobMap[result.jobid]) {
return;
}
var params = {
"id": result.jobid
};
jobMap[result.jobid] = true;
$.get('/getJobs', params, function (data) {
data.forEach(function (value) {
recentlist.append('<tr><td class="tdstyle">' + result.browser + '</td><td class="tdstyle">' + value.script + '</td><td class="tdstyle">' + value.names + '</td><td class="tdstyle">' + result.names + '</td><td class="tdstyle">' + result.datetime + '</td>')
});
});
});
$('#recentTest').empty().append(recentlist);
}