我在调试Ajax调用中返回的代码时遇到了一些问题 - 特别是在json中返回的函数(错误不会在Firefox中被捕获) - 直到我开始在Internet Explorer中调试这些问题(我认为它是一个与firefox相关的问题,因为Venkman也没有检测到这些错误.你知道从Ajax调用中调试json返回的代码的任何方法吗?
编辑03/04/2009 15:05
感谢所有人的回复,但我认为我没有很好地解释自己.我已经足够了解Firebug进行基本调试,但是当我在Ajax调用中获取一些有问题的代码时,我的问题就出现了.假设我们有以下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选项卡.
您可能希望使用"网络"选项卡并仅过滤XMLHttpRequests(XHR)的请求.
不要犹豫,在代码中或直接在控制台面板中使用console.dir(yourObject).这将为您提供对象的完整状态和属性.
检查您的请求/响应HTTP标头; 有时它只是编码问题.
如果您不知道哪个事件/用户操作触发了此XHR调用,则可以在AJAX调用之前添加console.trace().这样你就可以获得完整的调用堆栈.
我提出的唯一方法是用(丑陋的)try/catch包围你的代码.我想这是因为代码是在另一个javascript上下文中执行的
此代码提供了详细的错误消息:
ReferenceError: alerts is not defined
我真的怀疑改变执行上下文会解决问题.我不知道如何使用原型,但使用jquery,它可以很容易地完成:
$.ajax({ url: "test.html", context: document.body, success: function(){ $(this).addClass("done"); } });