我有一个全局的ajax错误处理程序,在这里:
function SetAjaxErrorHandler() {
$(document).ajaxError(function (event: JQueryEventObject, jqXHR: JQueryXHR, ajaxSettings: JQueryAjaxSettings, thrownError: string) {
console.log("in error");
// Call error API to log
var url1 = appSettings["errorLogApiUrl"];
$.ajax({
type: "POST",
url: url1 + "s",
data: jqXHR.responseText,
contentType: "application/json; charset=utf-8",
error: (jqXhr) => {
// I dont want the global error handler to be triggered here!
}
});
});
}
正如您所看到的,在一个事件上调用页面上的其他ajax调用之一时出错,我正在尝试进行另一个API调用以在服务器上记录它。但是,如果记录错误的调用失败,我会陷入递归循环。 所以我的问题是,在ajaxError()方法的ajax调用中,有没有办法阻止全局错误处理程序被触发?
tl; dr是否有办法为某些ajax调用使用全局ajax错误处理程序但是为其他人禁止它?
答案 0 :(得分:4)
是的,您可以在global
来电中将false
设为$.ajax()
:
$.ajax({
url: 'path/to/url',
global: false
});
来自.ajaxError()
文档:
如果在设置
global
选项的情况下调用$.ajax()
或$.ajaxSetup()
false
,.ajaxError()
方法不会触发。
答案 1 :(得分:3)
来自jQuery docs:
如果在全局选项设置为false的情况下调用$ .ajax()或$ .ajaxSetup(),则不会触发.ajaxError()方法。
https://api.jquery.com/ajaxError/
添加global:false
$.ajax({
type: "POST",
url: url1 + "s",
data: jqXHR.responseText,
contentType: "application/json; charset=utf-8",
global: false,
error: (jqXhr) => {
// I dont want the global error handler to be triggered here!
}