gpt4 book ai didi

javascript - 来自 javascript 的同步 Json 调用

转载 作者:行者123 更新时间:2023-12-01 02:21:54 24 4
gpt4 key购买 nike

我正在开发一个项目,在循环内我需要进行多个 JSON 调用。一旦退出该循环,我就需要处理我所做的所有调用的结果。我很难理解如何以符合我的操作顺序的方式进行这些调用。我处理结果的代码总是在服务调用完成之前执行。我创建了一个 jsfiddle 来演示,并在此处包含代码。

http://jsfiddle.net/VEkrf/3/

    var sourceData = { "fooIndex": "foo",
"barIndex": "bar"
}
var destinationData = {};
for (var sourceIndex in sourceData) {
$.getJSON('http://echo.jsontest.com/' + sourceIndex + '/' + sourceData[sourceIndex] + '?callback=?', null, function (result) {
for (var resultIndex in result) {
alert("Adding " + resultIndex + " : " + result[resultIndex]);
destinationData[resultIndex] = result[resultIndex];
}
});
}

if (Object.keys(destinationData).length == 0) {
alert("Destination not yet populated");
}
else {
alert("Eureka! You did it!");
}

最佳答案

这看起来像是 jQuery Deferred Object 的工作,和我的伙伴 $.when !

通过所有$.getJSON调用$.when ,当它们全部完成后,我将使用所有结果调用一个函数。

看看这个:

var sourceData = {
"fooIndex": "foo",
"barIndex": "bar"
};
var destinationData = {};

// Array of AJAX calls
var AJAX = [];

for (var sourceIndex in sourceData) {
AJAX.push($.getJSON('http://echo.jsontest.com/' + sourceIndex + '/' + sourceData[sourceIndex] + '?callback=?'));
}

// Apply is needed to pass each element as a parameter
$.when.apply($, AJAX).done(function(){
// This function will be called when all the AJAX calls are done

// The arguments of the functin are the responses from each request
for(var i = 0, len = AJAX.length; i < len; i++){
var result = arguments[i][0];
//arguments: [resultObj, 'success', jqXHR]
for (var resultIndex in result) {
alert("Adding " + resultIndex + " : " + result[resultIndex]);
destinationData[resultIndex] = result[resultIndex];
}
}

alert("Eureka! You did it!");
});

注意:由于这是异步的,destinationData在触发回调之前不可用。将任何使用它的代码放在 .done() 中回调。

关于javascript - 来自 javascript 的同步 Json 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14738545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com