如何找到哪个javascript代码解雇了ajax?

时间:2013-01-09 08:15:01

标签: javascript ajax debugging firebug

有没有快速的方法可以找出哪个javascript代码(文件名和确切行)触发了特定的ajax调用?

使用firebug我可以找到ajax调用,但快速查找确切的行将有助于调试

提前感谢您提供任何帮助

4 个答案:

答案 0 :(得分:3)

在Firebug中,您可以单击“控制台”面板中的源链接:

console xhr source link

或在Net面板中设置断点:

net xhr breakpoint

答案 1 :(得分:2)

如果在此ajax调用点的代码中放置断点,调试器将显示函数调用的堆栈。

请参阅Chrome developer tools documentation

enter image description here

答案 2 :(得分:0)

我通常做的是添加一堆:

console.log("message that explains where in the code I am now...");

但请注意,因为console.log可能会在旧版本的IE中出现问题,所以当你投入生产时,你必须删除所有的console.log调用。

答案 3 :(得分:0)

我真的不知道任何干净的方法(也许存在一个)。但我有点黑客提议。

如果您未在网页中使用Prototype.js,请在命令行中输入以下命令(使用Firebug 1.11):

window.old$ = $; // in case you're using a framework like jQuery
include("https://ajax.googleapis.com/ajax/libs/prototype/1.7.1.0/prototype.js"); // loads Prototype

控制台应该打印: prototype.js正确包含。<​​/ em>

然后,要恢复旧的“$”变量,请键入:

window.$ = window.old$;

现在加载了Prototype,我们可以包装XMLHttpRequest.prototype.open函数,这样我们就可以获得调用堆栈(就像建议的破坏一样):

XMLHttpRequest.prototype.open = XMLHttpRequest.prototype.open.wrap(function(orig, ...args)
{
    console.log("trace for :"+args[1]); // prints the URL of the request
    console.trace(); // prints the stack trace
    orig.apply(null, args); // call the original function
});

就是这样。

N.B。:如果请求在开始时启动:

    在“脚本”面板中
  • ,在网页的第一条JS指令上设置断点
  • 在“控制台”面板中执行上述命令
  • 返回“脚本”面板,然后单击“继续”