【问题标题】:Errors in jQuery ajax are not getting reported没有报告 jQuery ajax 中的错误
【发布时间】:2011-08-30 12:26:44
【问题描述】:

我在使用 jQuery ajax 成功处理程序时遇到了困难。成功处理程序中发生的任何 javascript 运行时错误似乎都不会被报告(Firefox 错误控制台中不会出现错误)。并且尝试在没有错误通知的情况下进行调试让我发疯。有人可以看看下面我的代码的简化版本,如果我正在做一些可能导致问题的愚蠢行为,请告诉我。

如果没有,如果有人可以在 Firefox 中对此进行测试并确认(或不确认)没有出现错误消息,而且不仅仅是我发疯了(或者我的 Firefox 安装有问题或其他问题)。我也把代码放到了网上——所以你可以点击下面来测试它....

http://www.alisonstrachan.co.uk/tests/ajax2/ajax_test2.html

ajax_test2.html

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.js"></script>
<script type="text/javascript">

$(document).ready(function(){

    //alert(missingVariable1);           //uncomment -> get error reported (as expected)

    $.ajax({
        url: "ajax_test2_process.php",
        data: {send: "hello"},
        async: false,
        success: function(data){
            $("#results").append(data);
            alert(missingVariable2);     //no error reported (there should be surely?)
            $("#results").append(" finished ");
            }
        });
});

</script>
</head>
<body>
<div id="results"></div>
</body>
</html>

ajax_test2_process.php

<?php
    echo "received: " . $_REQUEST['send'];
?>

【问题讨论】:

  • 你重定向到的页面显示received:hello这不是预期的结果
  • @3nigma 感谢您对此进行测试。是的,这是预期的结果。但我需要知道的是你在 Firefox 错误控制台中得到了什么。控制台中是否记录了故意的“alert()”错误?
  • 可能ajax请求失败,因此从不调用success,尝试用complete来改变success,使用FIREBUG
  • @3nigma:它还应该附加“完成”,这不是由于警报[静默]失败。
  • 谢谢@max4ever。 ajax 成功处理程序被调用,因为我在页面上看到“received: hello”。我也尝试过 Firebug,它也没有在其控制台选项卡中报告错误。

标签: jquery ajax firefox handler


【解决方案1】:

我的猜测是,由于 jQuery wrapping the callback in a try...catch,它默默地失败了。

因此,简而言之,在回调函数中发现的任何错误或错误代码都会默默地失败(并冒泡到我概述的 try...catch)然后停止处理它所在的位置。

【讨论】:

  • 谢谢。那讲得通。但这无疑使调试成为一场噩梦。或者有没有更好的调试方法。我错过了什么吗?
  • @macrae_dj:也许在回调的底部放置一个console.log('ajax complete'); 以验证回调是否已完整执行?我通常会基于我想要完成的所有事情看起来都已执行(良好的调用)或检查是否没有任何动作(错误的调用)。
  • 在我的真实项目中,我在成功回调中有大量的 javascript。我试图弄清楚如何“跳出”尝试/捕捉,因为我真的需要能够调试。我虽然可能使用setTimeout(continueSuccessHandler, 1) 或其他东西。不知道还有什么更优雅的吗?
  • @macrae 再次调试,看看 blackbird js。它非常适合调试您的代码并且没有烦人的警告框!
  • @Eonasdan。问题是没有报告运行时 javascript 错误。我仍然可以调试 - 但我只能使用 Firebug 的 console.log() 来尝试找出问题所在 - 与明确告知错误发生的位置相比,这是一个粗略的调试方案。不过感谢黑鸟链接,可能会派上用场。
【解决方案2】:

这可能是由于 Adblock Plus 或类似的扩展程序(检查您已安装的扩展程序),请参阅bug 653533

【讨论】:

  • 我在安全模式下运行 Firefox 时得到相同的结果(所有扩展都被禁用)。
【解决方案3】:

查看 Ajax 函数的其他回调 (http://api.jquery.com/jQuery.ajax/) - 您可能想查看 errorstatusCode - Firebug对于调查 ajax 相关问题也非常有用 - 您可以查看 ajax 通信的帖子和响应。

如果您想登录到 firebug 控制台,请使用 console.log('text');

【讨论】:

    【解决方案4】:

    您也可以尝试将您的 ajax 包装在像 jquery docs 建议的对象中:

    var jqxhr = $.ajax({ url: "example.php" })
        .success(function() { alert("success"); })
        .error(function() { alert("error"); })
        .complete(function() { alert("complete"); });
    

    【讨论】:

      猜你喜欢
      • 2013-08-10
      • 2019-11-09
      • 2013-01-18
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多