我需要结合三种方法:
我编写了三种返回$ .Deferred的方法,以便将它们与.done()链接在一起,如下所示:
function checkFunction() {
var code = $("#code").val();
return $.ajax({
url: "${pageContext.request.contextPath}/dataManagement/codeMaintenance/check",
method: "POST",
async: false,
data: {
"reasonCode": code
},
success: function(response, textStatus, jqXHR) {
var exists = response.dataMap.exists;
console.log("Code exists: " + exists);
if (exists == true) {
return $.Deferred().resolve(true);
} else {
return $.Deferred().reject();
}
}, error: function() {
return $.Deferred().reject("AJAX ERROR");
}
});
};
var confirmFunction = function(codeExists) {
console.log("Confirming overwrite");
if (codeExists == true) {
var confirm = confirm("Code Exists: Do you wish to overwrite?");
if (confirm == true) {
return $.Deferred(true);
} else {
return $.Deferred(false);
}
} else {
return $.Deferred(true);
}
};
var saveFunction = function() {
console.log("Saving");
var code = $("#code").val();
return $.ajax({
url: "${pageContext.request.contextPath}/dataManagement/codeMaintenance/save",
method: "POST",
data: {
"reasonCode": code
},
success: function(response, textStatus, jqXHR) {
alert("test");
return $.Deferred(true);
}
});
};
然后,我尝试通过此行执行:
checkFunction().done(confirmFunction(codeExists)).done(saveFunction());
不幸的是,我在第一种方法的$ .Deferred上设置的参数没有作为参数传递给ConfirmFunction()。
我究竟做错了什么?
杰森
简而言之:很多。
您尝试return
在调用的success
处理程序中使用异步函数内部$.ajax()
。
在这里,您传递函数调用的结果,而不传递函数的引用作为回调:
checkFunction().done(confirmFunction(codeExists)).done(saveFunction());
这应该更像这样:
checkFunction().done(confirmFunction).done(saveFunction);
在confirmFunction()
您返回一个新的Deferred对象。您应该做的是创建一个Deferred对象,返回各自的诺言,然后解析/拒绝Deferred对象。因此,例如,您的checkFunction()
函数应如下所示:
function checkFunction() {
var code = $("#code").val();
// create deferred object
var result = $.Deferred();
return $.ajax({
url: "${pageContext.request.contextPath}/dataManagement/codeMaintenance/check",
method: "POST",
async: false,
data: {
"reasonCode": code
},
success: function(response, textStatus, jqXHR) {
var exists = response.dataMap.exists;
console.log("Code exists: " + exists);
if (exists == true) {
result.resolve(true);
} else {
result.reject();
}
}, error: function() {
result.reject("AJAX ERROR");
}
});
return result.promise();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句