JQuery Ajax - 如何动态地停止全局错误处理程序

use*_*121 7 javascript ajax jquery

我有一个全局的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!
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

}

正如您所看到的,在一个事件上调用页面上的其他ajax调用之一时出错,我正在尝试进行另一个API调用以在服务器上记录它.但是,如果记录错误的调用失败,我会陷入递归循环.所以我的问题是,在ajaxError()方法的ajax调用中,有没有办法阻止全局错误处理程序被触发?

tl; dr有没有办法为一些ajax调用使用全局ajax错误处理程序但是为其他人禁止它?

Ada*_*eld 6

来自 jQuery 文档:

如果在全局选项设置为 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!
    }
Run Code Online (Sandbox Code Playgroud)


zak*_*lle 5

是的,您可以在通话中设置global为:false$.ajax()

$.ajax({
  url: 'path/to/url',
  global: false
});
Run Code Online (Sandbox Code Playgroud)

.ajaxError()文档:

如果在选项设置为的 情况下调用$.ajax()或,则该方法将不会触发。$.ajaxSetup()globalfalse.ajaxError()