从JSON文件加载后立即使用数据结果

时间:2013-10-15 20:09:50

标签: javascript jquery json asynchronous

在加载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文件创建数据后,如何立即使用具有正确元素的数据?

3 个答案:

答案 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给出了更好的方法。