jQuery $ .when(...)。done(...)没有按预期工作

时间:2014-12-23 16:58:11

标签: javascript jquery ajax

我有一个时序关键功能,在完成几个Ajax调用之前无法执行。 Ajax调用来自服务器的请求,以获取在初始页面加载时填充字段所需的数据。

我的Ajax调用正在运行,但在调用关键函数GetUserDefaults()之前它们没有完成。无论我在哪里设置断点(使用Firefox),我都看到_MasterRules始终按预期初始化,但没有断点GetUserDefaults()GetMasterRules()完成之前被调用。谁能告诉我document.ready中的代码有什么问题?

以下是我的代码示例:

_MasterRules = null;
_UserDefaults = null;

$(document).ready(function () {
    $.when( GetMasterRules() )
    .done(function () { 
        GetUserDefaults()  // <<== MUST NOT call until GetMasterRules() is complete
    });
})

// Initialize Master Rules
function GetMasterRules() {
    $.ajax({
        type: "GET",
        url: "/GetMasterRules",
        dataType: "json"
    })
    .done(function (data) {
        _MasterRules = data;
    })
}

// _MasterRules must be initialized before calling
function GetUserDefaults() {

    if (_MasterRules == null) {
        alert("_MasterRules == null");
    }

    $.ajax({
        type: "GET",
        url: "/GetUserDefaults",
        dataType: "json"
    })
    .done(function (data) {
        _UserDefaults = data;
    })
}

1 个答案:

答案 0 :(得分:2)

在将undefined传递给$.when时,代码没有链接/等待延迟对象。

提示:返回延迟GetMasterRules