2

$(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。

4

1 回答 1

1

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

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

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

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

更新:我的 DEMO 测试用例

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

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

​结果 着火了!

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

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

结果:不开火。

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

undefined.something

结果:不开火。

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

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

于 2012-05-03T10:14:05.277 回答