使用Firebug调试Ajax代码

Eri*_*ian 21 ajax firebug json

我在调试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>
Run Code Online (Sandbox Code Playgroud)

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

{'func':function(){console.log('loaded...');alert('hey');}}
Run Code Online (Sandbox Code Playgroud)

如果您在浏览器中加载页面并单击"测试"按钮(一切顺利),您将在控制台中获得一些内容,并在警告框中显示"嘿".现在将data.json文件更改为:

{'func':function(){console.log('loaded...');alerts('hey');}}
Run Code Online (Sandbox Code Playgroud)

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

Bry*_*n A 18

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

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

  • +1我只是提到网络和脚本选项卡一直很好,为我调试ajax (2认同)

Bri*_*zel 7

您可能希望使用"网络"选项卡并仅过滤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>
Run Code Online (Sandbox Code Playgroud)

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

ReferenceError: alerts is not defined
Run Code Online (Sandbox Code Playgroud)

我真的怀疑改变执行上下文会解决问题.我不知道如何使用原型,但使用jquery,它可以很容易地完成:

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


Gav*_*vin 0

我使用一个名为 fiddler 的 HTTP 代理调试器,它在调试我的 AJAX 问题时一直工作得很好。它捕获所有 HTTP 请求和响应供您查看。可从http://www.fiddlertool.com/免费获取