根据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
是否会排队,这意味着,确保在下一个调用开始之前完成一个调用?
答案 0 :(得分:1)
这是jQuery Deferred构造的正确用法吗?
不完全。 when()
方法接受deferred
对象,该对象是从创建AJAX请求的jQuery方法返回的。因此,您需要return
该对象才能使代码正常工作:
function file2store(url, store_name){
return $.getJSON(url, function(obj) { // note the return here.
// rest of your code...
});
}
函数调用file2store是否会排队,这意味着,确保一个调用在下一个调用完成之前完成?
没有。它们是按照您提供的顺序创建的,但是它们将以服务器响应它们的任何顺序完成。