2011-12-30 22 views
0

在我的成千上萬的javascript行中的某處,正在進行ajax調用。我不能爲了我的生活找出它來自哪裏。它似乎在頁面加載後立即發生。AJAX請求從每個頁面點擊服務器,我無法找到原始AJAX調用的來源

我可以在firebug中看到ajax調用正在進行。 ajax調用總是請求當前頁面。因此,例如,一旦加載了users#new,它將要求users#new.js,並且也對每個其他控制器和操作都做同樣的事情。

有沒有一種方法可以確定它在代碼中的位置?

+0

孤立它基於什麼控制器動作是被稱爲 – iwasrobbed 2011-12-30 03:16:02

+0

它發生在每一頁/動作 – 2011-12-30 03:18:13

+1

我想你誤會了。你說你可以在Firebug中看到ajax調用,對吧?因此,請檢查該ajax調用中要求的路徑,並將其隔離到某個控制器/操作。例如,如果AJAX調用命中您服務器日誌中的'/ users/new'路徑,那麼它可能與'users#new'操作相關。這應該允許你隔離哪些JS代碼可以進行該調用。 – iwasrobbed 2011-12-30 03:26:17

回答

0

在某個時間點,我重新編寫了我的ajax設置函數。

$阿賈克斯!= $ .ajaxSetup,顯然:)

1

雖然你已經找到了解決辦法,你仍然可以彌補使用調試器的情況。假設您正在使用jQuery及其AJAX幫助程序,只需在$.ajax方法的first line中設置一個斷點即可。

當呼叫$.ajax時,運行時將停在斷點處,您可以查看調用堆棧以準確找出調用的來源。

如果您是直接使用XMLHttpRequest構造函數而不是通過jQuery或其他包裝函數,則用僞實現替換原始XMLHttpRequest構造函數以追蹤其調用方。

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

放置一個斷點或程序調用調試器在此重寫實現的發送方法,每當有人試圖實例化一個新XMLHttpRequest對象,並調用send方法,您可以截獲通話和查看來電跟蹤找出是誰打了電話。

有很多很好的調試選項,比如Firefox的Firebug,或者Chrome和Safari中的內置開發工具。

2

在您的JavaScript控制檯中,您可以用您自己的實現覆蓋XMLHttpRequest.send()並在那裏設置一箇中斷點,以便您可以在調試器中調用堆棧跟蹤時檢查堆棧跟蹤。

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