我的脚本通过 jQuery 发出 Ajax 请求。接收到的数据通过服务器端脚本 (php) 进行 json_encoded。这进一步,字符串化,然后使用 jQuery 解析 JSON 以产生一个记录集合。我循环遍历 recordCollection 并将其推送到记录数组,该变量在回调函数范围之外声明。
该函数如下所示:
var records = [] ;
$.getJSON(url, {id : recordid}, function(data) {
var recordCollection = jQuery.parseJSON(JSON.stringify(data));
$.each(recordCollection, function(){
records.push(this);
});
console.log(records) // displays all the objects, thus, the above code is right
});
console.log(records); // displays []
正如您在上面看到的,我第二次将记录记录到控制台时,它产生了一个空数组,这使我得出两个结论:
Javascript 数组是按值传递的,因此回调函数范围之外的记录不会保留它的值。
Ajax 是异步的,因此在 ajax 调用完成之前记录记录,因此它仍然保留空的未初始化记录数组的值并将其记录到控制台上。
现在如果 1 为真,我该如何初始化记录数组?
如果 2 是真的,我应该让这个 Ajax 调用同步吗?这将使javascript阻塞,直到返回值,因此第二次记录数组登录到控制台,它将显示数组的更新值?
第三是我完全错过了一个技巧,在这里做了一些非常愚蠢的事情。
我确实需要使用从 ajax 调用返回的数据来设置记录数组,因为它需要传递给脚本中的不同 javascript 函数,并且 DOM 基本上等待这个结果来加载数据。
多谢你们!