当函数不评估延迟对象时jQuery

时间:2012-10-11 08:59:49

标签: javascript jquery ajax web deferred

我遇到了Jquery延迟对象的问题。我正在一个函数内创建一个promise,它将执行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()时从未起作用。我正在使用延期第一次参加我的项目。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

documentation表示$.when()接受延迟对象(使用$.Deferred() 普通对象创建,这些对象被视为已履行的承诺。

  

如果将单个参数传递给jQuery.when并且它不是Deferred,则将其视为已解决的Deferred,并且将立即执行附加的所有doneCallbacks。

AddCodes()不会返回任何内容。如果您返回延迟对象(def),这应该可以。

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

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

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

    return def.promise();
}
你应该没问题。请注意,这就像the first example here