我在使用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();
}
你应该没事。请注意,这就像这里的第一个示例一样。