我知道在完成ajax调用之前有几种执行代码的方法,我知道使用when() - 方法是推荐的方法 这个。 (http://api.jquery.com/jQuery.when/)
我有一个函数loadFilter()
,它返回一个像这样的延迟对象:
function loadFilter() {
...code...
return $.ajax({
type: 'POST',
url: loadFile,
data: {object: obj},
dataType: 'html'
}).done(function(data) {
$(targetDiv).html(data);
initDrag();
$("body").removeClass("wait");
})
.fail(function(ts) {
alert(ts.responseText);
});
}
来自另一个函数getpage()
的调用使用不同的值调用loadFilter()
函数两次:
function getpage() {
...code...
loadFilter(subcatId, "getnavigationpages", paginationDiv, doSearch);
loadFilter(subcatId, "getproducts", targetDiv, doSearch);
//When ajax-calls are done in function loadFilter.
$.when(loadFilter()).done(function(rsdata1) {
...code to execute when both loadFilter-functions above
});
}
我怎么知道$ .when()执行的时间??? 我想在两个 loadFilters()
被调用时执行代码,但我认为!? $ .when()可以执行
要么第一次调用loadFilter()还是第二次?
答案 0 :(得分:3)
$.when
接受任意数量的承诺,并在所有这些承诺得到解决时解决。所以你的代码看起来像这样:
$.when(
loadFilter(subcatId, "getnavigationpages", paginationDiv, doSearch),
loadFilter(subcatId, "getproducts", targetDiv, doSearch)
).always(function() {
// Both have completed
});
我上面使用了always
,无论解决方案类型如何(已解决,失败等)都会触发。或者您可以使用done
仅处理成功的分辨率,或then
分别处理每种类型的分辨率。