在加载JSON文件后立即使用从JSON文件加载的数据时遇到了一些麻烦。代码如下。
newdata = []
$.getJSON(file, function(data) {
$.each(data.items, function(i,item){
if (item.id != undefined) {
if (item.id === cl) {
newdata.push(item.id);
}
}
});
});
console.log(newdata);
虽然console.log
语句不返回数据,但它返回一个空数组[]
。但是,如果我在chrome调试器中调用变量data
,它将返回正确的数组。在从JSON文件创建数据后,如何立即使用具有正确元素的数据?
答案 0 :(得分:1)
应该这样写,
newdata = []
$.getJSON(file, function(data) {
$.each(data.items, function(i,item){
if (item.id != undefined) {
if (item.id === cl) {
newdata.push(item.id);
}
}
});
console.log(newdata);
});
答案 1 :(得分:0)
jQuery.getJSON
异步。您should read the documentation on it熟悉其成功回调的工作原理。
成功调用接收JSON数据的函数,但实际$.getJSON
函数立即返回 并继续执行。因此,实际上,这意味着您的console.log(data)
会在JSON数据恢复之前执行,但是当您在Chrome控制台中手动记录它时,数据已被检索。
jQuery AJAX方法也返回objects that implement a promise-like API,所以你也可以使用它。
Stack Overflow和其他资源上有很多关于这个主题的问题。
以下代码同时使用success
函数参数和Deferred
对象方法。您可以使用handleData
函数中的数据执行任何操作。
function handleData(data) {
// you can do whatever you want with your data here
console.log(data);
}
function formatData(data) {
var formatted = [];
$.each(data.items, function(i,item){
if (item.id != undefined) {
if (item.id === cl) {
formatted.push(item.id);
}
}
});
return formatted;
}
$.getJSON(file, formatData).done(handleData);
答案 2 :(得分:0)
另一种方法是:
$.ajaxSetup({
async: false
});
但是在被指出该方法被弃用之后,melc和Thomas Upton给出了更好的方法。