以下是不按我想要的顺序运行的场景:
var masterData = {}; var tableNames = ['table1','table2','table3','table4','table5','table6']; var pullSqlData = function(){ tableNames.forEach(function(value) { if(storage.isEmpty(value)) { $.getJSON('http://domain.com?r=appsync/read&id='+value+ "&callback=", function(data){ masterData[value] = data; storage.set(value,data); }); } else { masterData[value] = storage.get(value); } }); }; $.when(pullSqlData()).done(function(){ console.log('all done'); });
在我四处搜索之后,我知道如果我手动做类似的话,我可以上班
$.when( $.getJSON('http://domain.com?r=appsync/read&id=table1&callback=', function(data){ masterData[value] = data; storage.set(value,data); }), $.getJSON('http://domain.com?r=appsync/read&id=table2&callback=', function(data){ masterData[value] = data; storage.set(value,data); }), //more calls ).done(function(){ console.log('all done'); });
但是我想知道是否有一种方法可以正确地进行
*storage是一个HTML5 localStorage jQuery插件
由于您是动态数量的请求,请尝试
var masterData = {}; var tableNames = ['table1', 'table2', 'table3', 'table4', 'table5', 'table6']; var pullSqlData = function () { var requests = []; tableNames.forEach(function (value) { if (storage.isEmpty(value)) { var xhr = $.getJSON('http://domain.com?r=appsync/read&id=' + value + "&callback=", function (data) { masterData[value] = data; storage.set(value, data); }); requests.push(xhr) } else { masterData[value] = storage.get(value); } }); return requests; }; $.when.apply($, pullSqlData()).done(function () { console.log('all done'); });
您需要传递所有ajax请求,$.when()
因此pullSqlData
必须返回由它创建的ajax请求列表.另外$ .when()不会将数组作为参数,因此您需要使用Function.apply()将可变数量的参数传递给它