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

Using data results immediately after loading from JSON file

本文关键字:数据 结果 JSON 文件 加载      更新时间:2023-09-26

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

应该这样写,

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);
        });
jQuery.getJSON

异步的。您应该阅读有关它的文档以熟悉其成功回调的工作原理。

接收 JSON 数据的函数在成功时被调用,但实际的$.getJSON函数会立即返回并继续执行。因此,实际上,这意味着您的console.log(data)会在 JSON 数据返回之前执行,但当您在 Chrome 控制台中手动记录数据时,数据已被检索。

jQuery AJAX 方法还返回实现类似 promise 的 API 的对象,因此您也可以使用它。

关于

这个主题有很多很多关于堆栈溢出和其他资源的问题。

下面的代码同时使用 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);

另一种方法是:

$.ajaxSetup({
    async: false
});

但是在被指出该方法已被弃用之后,melc 和 Thomas Upton 给出了更好的方法来做到这一点。