我有一个带有很多ajax调用的WebApp,所以我做了以下清理工作:
我使用默认值定义了一个ajax调用:
$.ajaxCall = function (Params){
return $.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: Params.data,
url: Params.url,
});
};
我定义了一个全局ajax错误处理程序:
$(document).ajaxError(function( event, xhr, settings, error ) {
if(xhr.hasOwnProperty("responseJSON")
&& xhr.responseJSON.hasOwnProperty("Message")) {
let data = settings.hasOwnProperty("data") ? JSON.parse(settings.data) : null;
switch (xhr.responseJSON.Message) {
// Handle errors
}
}
});
现在我想在某处链接$.ajaxCall
返回的承诺(即$.ajax
返回的延迟对象的promise对象):
$.ajaxCall({
url: "WebServices/Workspace_Ajax.asmx/WebMethod",
data: JSON.stringify(DataObject)
})
.then(successAjax, function() {
console.log("Rejected, ajax call failed!");
});
但then
的拒绝处理程序未被调用,而$.ajaxError
函数调用良好。我不明白为什么Promise没有被拒绝(对于ajax请求有效的情况,Promise得到了很好的解决)。我错过了什么?