全局捕获$ .get和$ .post处理程序中的javascript错误

时间:2012-05-03 09:59:04

标签: javascript ajax jquery

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

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

E.g。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

DEMO: http://jsfiddle.net/KWX4k/

更新:来自DEMO的我的测试用例

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

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

结果:开火!

II。成功处理程序中没有问题的Invaid Ajax请求:

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

结果:不会触发。

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

undefined.something

结果:不会触发。

所以,似乎工作正常:)

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