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,显然:)