2014-04-01 17 views
5

我有一个全球性的AJAX错误处理程序,在这里:JQuery的阿贾克斯 - 如何阻止全球错误处理动态

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错误处理程序,但为其他人调用?

回答

3

是的,你可以在$.ajax()调用设置globalfalse

$.ajax({ 
    url: 'path/to/url', 
    global: false 
}); 

.ajaxError()文档:

如果$.ajax()$.ajaxSetup()时调用global选项设置为 false.ajaxError()方法不会触发。

2

从jQuery的文档:

如果$。阿贾克斯()或$ .ajaxSetup()被调用设置为false全局选项,.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! 
    }