AJAX请求从每个页面访问服务器,我无法找到原始AJAX调用的源

AJAX request hits server from every page and I can't find the source of that original AJAX call

本文关键字:AJAX 原始 调用 请求 访问 服务器      更新时间:2023-09-26

在我的数千行javascript中,某个地方正在进行ajax调用。我无论如何也想不出它是从哪儿来的。它似乎发生在页面加载后。

我可以在firebug中看到ajax调用正在进行。ajax调用总是请求当前页面。因此,例如,一旦users#new加载,它就会请求users#new.js,并对所有其他控制器和动作执行相同的操作。

是否有一种方法可以确定在代码中它是从哪里被调用的?

虽然您已经找到了解决方案,但是您仍然可以使用调试器来纠正这种情况。假设您正在使用jQuery及其AJAX帮助程序,只需在$.ajax方法的第一行设置一个断点。

当对$.ajax进行调用时,运行时将在断点处停止,您可以查看调用堆栈以确定调用来自何处。

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

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

在这个被覆盖的实现的send方法中放置一个断点或以编程方式调用调试器,每当有人试图实例化一个新的XMLHttpRequest对象并调用send方法时,您可以拦截调用并查看调用跟踪以找出谁进行了调用。

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

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

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

在某个时间点,我重新编写了ajax设置函数

$。= $。ajaxSetup,显然:)