根据 jQuery 文档:
To execute a function after two ajax requests are successful:
$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1, a2){
/* a1 and a2 are arguments resolved for the
page1 and page2 ajax requests, respectively */
var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
if ( /Whip It/.test(jqXHR.responseText) ) {
alert("First page has 'Whip It' somewhere.");
}
});
我有这个:
$.when(
file2store('resources/states_obj.txt?v=2', 'states'),
file2store('resources/lgas_obj.txt?v=2', 'lgas'),
file2store('resources/villages_obj.txt?v=2', 'villages'),
file2store('resources/staff_obj.txt?v=2', 'staff')
).done(function(){
console.log('All data put');
});
function file2store(url, store_name){
$.getJSON(url, function(obj){
db.put(store_name, obj).then(
function(ids) {
console.log(store_name+': '+ids.length + ' items put.');
}, function(e) {
throw e;
}
);
});
}
ajax 回调中的变量db
是 indexedDB 存储对象的全局变量,在脚本顶部获得(此处未显示)。
这是 jQuery
Deferred
构造的正确用法吗?函数调用
file2store
是否会排队,也就是说,确保一个调用在下一个调用开始之前完成?