0

我遇到了 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() 函数成功执行,我只是调用另一个函数将一些数据插入数据库。因为两者都是依赖函数。

问题是当函数不评估时, deferredobject. processData()永远不会起作用。我第一次使用延迟到我的项目。请帮我解决这个问题。

4

1 回答 1

1

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

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

AddCodes()不返回任何东西。如果您返回您的延迟对象 ( def),这应该可以工作。

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

var AddCodes = function(XML ){
    var def = $.Deferred();

    $.ajax({
        ....
    });

    return def.promise();
}

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

于 2012-10-11T09:13:40.730 回答