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

标签 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() 时还是第二次调用时?

最佳答案

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

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

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

关于jquery - 从同一函数返回两个 ajax 调用 - $(when) 这是执行的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19378310/

相关文章:

javascript - 如何在jQuery中检查空对象

javascript - 从ajax调用返回的值未在 Angular js中的 Controller 中设置为变量

javascript - 使用 jQuery 动态创建克隆编号表单

javascript - 更改 downloadurl() 以返回 xml

jQuery $.wait() *所有*延迟的被拒绝?

javascript - Highcharts - 当饼图在悬停时移动时,如何在每个饼图内移动图标?

javascript - AJAX - 使用 AJAX 将 knockout 可观察值作为 JSON 对象发送到服务器

javascript - 替换浏览器中的整个页面

javascript - JQuery Promise .notify 需要关闭...