AJAX请求从每个页面命中服务器,我找不到原始AJAX调用的来源

在我的成千上万行javascript中,正在进行ajax调用。 我不能为我的生活找出它的来源。 它似乎发生在页面加载后。

我可以在firebug中看到正在进行ajax调用。 ajax调用始终请求当前页面。 因此,例如,一旦users#new users#new.js加载,它就会向users#new.js提出要求,并且对每个其他控制器和操作也users#new.js

有没有办法可以确定从中调用代码的位置?

在JavaScript控制台中,您可以使用自己的实现覆盖XMLHttpRequest.send()并在那里设置断点,以便在调用时调试器中的堆栈跟踪。

 var send = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function () { send.apply(this, arguments); // set break point here }; 

虽然您已经找到了解决方案,但您仍然可以使用调试器来解决问题。 假设您使用的是jQuery及其AJAX助手,只需在$.ajax方法的第一行设置断点即可。

当调用$.ajax ,运行时将在断点处暂停,您可以查看调用堆栈以确定调用的确切位置。

如果您直接使用XMLHttpRequest构造函数而不是通过jQuery或其他包装器,则将原始XMLHttpRequest构造函数替换为虚拟实现,以便跟踪其调用者。

 function XMLHttpRequest() { this.open = function() {}; // ignore this.send = function() { debugger; }; } 

放置断点或以编程方式在此重写实现的send方法中调用调试器,每当有人尝试实例化新的XMLHttpRequest对象并调用send方法时,您可以拦截调用并查看调​​用跟踪以确定是谁创建了呼叫。

有很多很好的调试选项,比如Firebug for Firefox,或Chrome和Safari中的内置开发者工具。

在某些时候,我重新编写了我的ajax设置function。

$ .ajax!= $ .ajaxSetup,显然:)