【问题标题】:Statements inside jQuery deferred functions fail silentlyjQuery 延迟函数中的语句静默失败
【发布时间】:2011-08-02 18:00:32
【问题描述】:

我遇到了一个 jQuery 问题,这使得调试 JavaScript 变得比现在更加糟糕:如果 jqXHR 延迟函数内部的语句失败,它们将静默失败,而且我还没有找到捕获此错误的方法.考虑以下示例:

var xhr = $.ajax({type: "GET",
                   url: "test.php"});
xhr.done(function() { 
    a += b; 
});

其中 a 和 b 都未定义。这应该返回一个错误,但是所有执行都停止了,我没有注意到任何事情都失败了。另一方面,如果我写以下内容:

function thisIsAnError() {
    a += b;
}
thisIsAnError();

它将按预期失败,将“a is not defined”记录到 Firefox 错误控制台和 Firebug 控制台。

Google 搜索什么也没发现,也许我错过了 jQuery 中的一些错误处理功能?请注意,xhr.fail() 不会捕获此错误,因为失败的不是 XHR。

【问题讨论】:

    标签: javascript jquery jquery-deferred


    【解决方案1】:

    您正在使用的$.get() 函数没有done() 方法。我相信你想要附加你的函数是success() 方法。 jsFiddle exmample 工作正常。

    http://api.jquery.com/jQuery.get/

    http://api.jquery.com/jQuery.get/#jqxhr-object

    【讨论】:

    • 对不起,我应该使用一个更准确的例子——我实际上是用 $.ajax() 调用我的 AJAX 请求,它确实有一个 .done() 函数。无论如何,请注意 this jsFiddle 只记录一个错误,尽管事实上 a 未定义并在两个地方调用。
    • 我刚刚看了那个 jsFiddle,它给出了两个错误i.imgur.com/TGn1i.png
    • 不知何故我只得到一个错误。看起来它一定是在我的机器上失败了,而不是 jQuery 本身。无论如何感谢您的帮助。编辑:在 Chrome 上,我收到两个错误。火狐,一个。我想从现在开始我将在 Chrome 中进行调试。
    【解决方案2】:

    调试 js 的一种方法(和 imo 最好的方法)是使用 chrome 扩展的 firefox,firebug。 Firefox 有一个比 chrome 扩展更高级的插件,但两者都可以工作。

    Alos,.fail() 不起作用,您要查找的是 .error()

    【讨论】:

    • 我有 Firebug。事实上,使用 Firebug 调试器单步调试代码会破坏它——当遇到错误时它会静默地停止执行代码,但 Firebug 仍然认为它正在调试。
    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多