Tro*_*roy 2 javascript jquery json jsonp
我正在开发一个项目,在这个项目中我需要进行多个JSON调用.一旦我退出该循环,我需要处理我所做的所有调用的结果.我很难理解如何按照我的操作顺序来完成这些调用.在完成对服务的调用之前,始终执行处理结果的代码.我创建了一个jsfiddle来演示并在此处包含代码.
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!");
}
Run Code Online (Sandbox Code Playgroud)
这看起来像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!");
});
Run Code Online (Sandbox Code Playgroud)
注意:由于这是异步的,destinationData因此在触发回调之前将无法使用.将使用任何代码内的.done()回调.
| 归档时间: |
|
| 查看次数: |
1261 次 |
| 最近记录: |