我在其中一个页面上触发了2个Ajax请求,在向用户显示数据之前,我需要等待它们都加载。最好的管理方法是什么?

Ajax请求是从2个单独的类发送的,它们公开了MakeRequest(successCallback,failedCallback)方法,以确保您可以断言ajax完成时将调用相关的回调。

这些都在 Controller 内调用(使用 knockout js),这里是一个示例:

// Some JS File
function SomeController(ajaxService1, ajaxService2) {

    this.model = ...

    this.bothAjaxRequestsComplete = function() {
        ... Do something on view
    };

    this.invokeFirstAjax = function() {
        ajaxService1.MakeRequest(firstAjaxSuccess, firstAjaxFailed);
    };

    this.invokeSecondAjax = function() {
        ajaxService2.MakeRequest(secondAjaxSuccess, secondAjaxFailed);
    };

    var firstAjaxSuccess = function(data) {
        ... Do something on model
    };

    var secondAjaxSuccess = function(data) {
        ... Do something on model
    };

    var firstAjaxFailed = function(...) {...}
    var secondAjaxFailed = function(...) {...}
}

var someController = new SomeController();
$(document).ready(function(){
    someController.invokeFirstAjax();
    someController.invokeSecondAjax();
});

最佳答案

我发现使用“递延”可以很好地解决这种问题。它们使您可以轻松定义应执行的操作的列表以及回调/回调列表。

我相信他们在jQuery 1.5中引入了jQuery deferred object

关于javascript - 等待多个ajax结果的良好模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6636518/

10-16 19:57
查看更多