【问题标题】:Globally catching javascript errors in $.get and $.post handlers在 $.get 和 $.post 处理程序中全局捕获 javascript 错误
【发布时间】:2012-05-03 09:59:04
【问题描述】:

我正在使用$(document).ajaxError() 来捕获 ajax 调用中的服务器端和通信错误。

在 ajax javascript 处理程序中全局捕获客户端错误(用于日志记录目的)的好方法是什么?覆盖$.ajax()?

例如

$.get("http://foo.com/", function(){
  alert(undefined.something); // I want this exception to be logged
});

我想避免为我的所有 ajax 处理程序编写单独的 try...catch...log。

【问题讨论】:

    标签: javascript ajax jquery


    【解决方案1】:

    我唯一想到的就是绑定这样的error事件:

    ​$(window).error(function(e){
        if ($.active > 0) {
            // your error handling
        }
    });
    

    $.active 显示活动 Ajax 请求的数量,因此即使请求返回成功但成功处理程序中有 undefined.something 问题也会触发错误。

    演示: http://jsfiddle.net/KWX4k/

    更新:我的 DEMO 测试用例

    我。成功处理程序中存在问题的有效 Ajax 请求:

    $.get("/", function() {
        undefined.something
    });
    

    结果: 触发!

    二。成功处理程序中的无效 Ajax 请求没有问题:

    $.get("http://www.google.com/", function() {
        // undefined.something
    });
    

    结果:没有触发。

    三。代码中的简单未定义错误:

    undefined.something
    

    结果:没有触发。

    所以,它似乎正在工作:)

    但是,在这种方法中,我发现了一个小缺点。由于 Ajax 通常以异步方式使用,如果您有两个错误,事件将触发两次 - 在 Ajax 处理程序和调用此 Ajax 请求的方法中(即在调用 Ajax 之后立即放置)。但是,这种情况并不重要,因为 Ajax 请求之后的所有操作通常都会转移到 Ajax 成功处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-06
      • 2018-06-14
      • 2019-03-15
      • 2010-11-25
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多