Firefox不会在AJAX'线程'上显示javascript错误?

时间:2011-06-14 04:44:02

标签: javascript ajax

我有一个函数test_fn,它被称为两种方式:

(a)来自按钮的onclick属性;或者(b)来自jQuery AJAX调用的success函数,如下所示:

$.ajax({
    type:  'POST',
    ...
    success: function(data) {
        test_fn();
    }
});

我注意到我的Firefox(Linux上的3.6.17)错误控制台似乎没有向我显示在AJAX成功函数调用的代码中出现的任何 javascript错误。而像往常一样,它在由GUI操作运行的代码中显示错误。

例如,如果我的测试函数test_fn定义如下:

function test_fn() {
    blah
}

当通过单击按钮调用test_fn时,我会看到错误控制台上报告的明显的javascript错误,但是当我的代码执行(成功的)AJAX调用并调用test_fn时那样。

我环顾网络,并没有看到任何类似“AJAX'线程'不记录他们的javascript错误”或类似的东西。很多我的javascript都是在一个AJAX回调中执行的......我想知道这种行为是否已经在某个地方偷偷摸摸/某种程度上。我有点慌乱;当一个人的Javascript无声地失败时,很难找到没有错误消息或行号的地方。

有人可以提供任何帮助或建议吗?感谢。

2 个答案:

答案 0 :(得分:1)

你试过了吗?

$.ajax({
    type:  'POST',
    ...
    success: function(data) {
        test_fn();
    },
    error: function(jqXHR, textStatus, errorThrown){
       // Aw Snap... Check textStatus maybe?
    }
});

答案 1 :(得分:0)

您可以将整个事件包装在try...catch语句中,并在出现异常时将其记录下来。这可能会有点繁琐,所以你可能想要一个函数返回一个为你包装函数的函数:

function wrap(func) {
    return function wrapped() {
        try {
            func.apply(this, arguments);
        }catch(ex) {
            if(console&&console.error) {
                console.error(ex);
            }else{
                alert(ex);
            }
        }
    };
}

像这样使用:

$.ajax({
    ...
    success: wrap(function(data) {
        // Test it by generating an error by calling a number.
        (1)();
    })
});