【问题标题】:JQuery Ajax - How to stop global error handler dynamicallyJQuery Ajax - 如何动态停止全局错误处理程序
【发布时间】:2014-04-01 22:59:10
【问题描述】:

我有一个全局 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 错误处理程序,但为其他调用禁止它?

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    是的,您可以在$.ajax() 调用中将global 设置为false

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

    来自.ajaxError() 文档:

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

    【讨论】:

      【解决方案2】:

      来自 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!
          }
      

      【讨论】:

        猜你喜欢
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-31
        • 2013-03-06
        • 2012-08-11
        • 2023-04-04
        相关资源
        最近更新 更多