从同一个函数返回两个ajax调用 - $(when)这个被执行了吗?

时间:2013-10-15 10:00:31

标签: jquery ajax jquery-deferred

我知道在完成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()还是第二次?

1 个答案:

答案 0 :(得分:3)

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

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

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