用Firebug调试Ajax代码

我在调试Ajax调用中返回的代码时遇到了一些问题 - 具体地说,是一个在json中返回的函数(错误不会被困在Firefox中) - 直到我开始在Internet Explorer中调试这些问题时(我认为它是一个Firefox相关的问题,因为Venkman也没有检测到这些错误)你知道任何方式来调试从Ajax调用返回在json中的代码吗?


编辑03/04/2009 15:05


感谢大家的回应,但我想我没有足够好地解释自己。 我知道足够多的Firebug进行基本的调试,但是当我在Ajax调用中获取一些代码时,我的问题就会发生。 假设我们有以下HTML文件(您需要在同一文件夹中使原型正确工作):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript" src="prototype.js"></script>
</head>
<body>
<script>
function ajaxErrorTest()
{
    new Ajax.Request('data.json', {
           'method': 'get',
           'onSuccess': function(data){
           if(data.responseJSON.func)
           data.responseJSON.func();}});
}
</script>
<input type="button" value="test" onclick="ajaxErrorTest();" />
</body>
</html>

然后,data.json文件的内容是这样的:

{'func':function(){console.log('loaded...');alert('hey');}}

如果您在浏览器中加载页面并单击“测试”按钮(并且一切顺利),您将在控制台中获得一些信息,并显示一个警告框,提示“嗨”。 现在将data.json文件更改为:

{'func':function(){console.log('loaded...');alerts('hey');}}

...再次点击'测试'按钮(无需重新加载页面;-)你得到的控制台线,但没有警报框......并没有错误! 这是我试图调试的那种错误。


尝试单击“控制台”面板(它是一个选项卡)并启用它。 你会发现任何HTTP请求都会被它们包含的任何信息所捕获。 我使用它来查看存储在请求中的任何JSON以及任何错误(500/404 / etc)。

另请注意,您必须在每个域上启用控制台面板。 通常有三个子标题:标题,帖子和响应。 当我调试我的AJAX时,我通常会使用post / response选项卡。


您可能想要使用Net选项卡并仅过滤XMLHttpRequests(XHR)的请求。

其他提示:

  • 请不要犹豫,直接在控制台面板中输入console.dir(yourObject)。 这将为您提供对象的完整状态和属性。
  • 检查您的请求/响应HTTP标头; 有时候这只是一个编码问题。
  • 如果您不知道触发此XHR调用的事件/用户操作,则可以在AJAX调用之前添加console.trace()。 这样你将得到完整的调用堆栈。
  • 编辑:

    代码在另一个环境中执行

    我想出的唯一方法是用一个(丑陋的)try / catch来包围你的代码。 我想这是因为代码在另一个JavaScript上下文中执行

    <script>
    function ajaxErrorTest()
    {
        new Ajax.Request('data.json', {
               'method': 'get',
               'onSuccess': function(data){
    
               try{
                 if(data.responseJSON.func)
                 data.responseJSON.func();}});
               } catch (err) {
                 console.dir(err);
               }
    }
    </script>
    

    此代码提供了详细的错误消息:

    ReferenceError: alerts is not defined
    

    我真的怀疑改变执行上下文会解决问题。 我不知道如何与原型,但与jQuery,它可以轻松完成:

    $.ajax({
      url: "test.html",
      context: document.body,
      success: function(){
        $(this).addClass("done");
      }
    });
    

    我不确定这个问题涉及到检索到的实际JSON。 你可以直接在你的onSuccess处理器中抛出一个错误,看看它是否出现在Firebug控制台中? 像这样的东西:

    onSuccess: function() { alerts('hey'); }
    

    如果是这种情况,那么这个问题应该在Firebug 1.7中解决。

    链接地址: http://www.djcxy.com/p/51875.html

    上一篇: Debugging Ajax code with Firebug

    下一篇: like debugger for Google Chrome