当函数不计算延迟对象时,jQuery



我在使用Jquery延迟对象时遇到了问题。我正在一个函数内创建一个承诺,该函数将执行 ajax 调用并将数据保存到服务器。我知道jQuery ajax有一个预定义的延迟对象。

var AddCodes = function(XML ){
    var def = $.Deferred();
    $.ajax({
        type: "POST",
        url: "webservicename.asmx/SaveCode",
        data: "{" + XML + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function () {
            def.resolve();
        },
        error: function (jqXHR, status, error) {
            def.reject();
        }
    });
   return def.promise();
}

然后我正在像这样评估函数。

$.when(AddCodes(XML)).then(function(){
    processData();
}

如果 AddCodes() 函数成功执行,只有我调用另一个函数将一些数据插入数据库。因为两者都是依赖函数。

问题是当函数不计算延迟object. processData()从未工作时。我第一次使用延迟到我的项目中。请帮我解决这个问题。

文档说$.when()接受延迟对象(使用 $.Deferred() 和普通对象创建,这些对象被视为已经实现的承诺。

如果将单个参数传递给 jQuery.when 并且它不是延迟参数,它将被视为已解析的延迟参数,并且任何附加的 doneCallbacks 都将立即执行。

但是AddCodes()什么也不返回。如果您返回延迟对象(def),这应该可以工作。

因此,如果您将代码更改为

var AddCodes = function(XML ){
    var def = $.Deferred();
    $.ajax({
        ....
    });
    return def.promise();
}

你应该没事。请注意,这就像这里的第一个示例一样。

最新更新