1

我知道在完成 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() 时执行,还是在第二次调用时执行?

4

1 回答 1

3

$.when接受任意数量的 Promise,并在所有这些 Promise 都解决时解决。所以你的代码看起来像这样:

$.when(
    loadFilter(subcatId, "getnavigationpages", paginationDiv, doSearch),
    loadFilter(subcatId, "getproducts", targetDiv, doSearch)
).always(function() {
    // Both have completed
});

我在always上面使用过,无论解决方案类型如何(已解决、失败等)都会触发。或者您可以使用done仅处理成功的解决方案,或then分别处理每种类型的解决方案。

于 2013-10-15T10:03:44.027 回答