我遇到了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()
时从未起作用。我正在使用延期第一次参加我的项目。请帮我解决这个问题。
答案 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。