我想了解如何識別以編程方式使用JavaScript或jQuery爲現有代碼庫啓動Ajax調用的函數名稱。如何識別AJAX或XMLHttpRequest調用中的調用者函數名稱?
我正在研究現有的大型代碼庫的工具,因此試圖確定與AJAX請求相關的函數名稱。所以,已經有很多代碼並且修改每種方法似乎都不是最好的方法。所以,我想要考慮一種適用於所有方法的通用方法。該代碼已經有一個圍繞AJAX調用的通用包裝器,因此我可以掛鉤該方法的入口和出口點。
例如,在下面的代碼中,在always
函數中,我需要知道啓動器函數名稱或調用堆棧。
function ajaxWrapper(){
var jqxhr = $.ajax("https://jsonplaceholder.typicode.com/posts/1")
.done(function() {
console.log("success");
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
// TODO: Who Initiated the call ?
});
}
function initiator1(){
\t initiator2();
}
function initiator2(){
\t ajaxWrapper();
}
initiator1();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
我有什麼企圖?
我知道一種方法是使用在
beforeSend
方法設置自定義首部和總是回調接收jqXHR
對象作爲參數。但是這似乎並不適合,因爲我無法修改所有將方法名稱作爲參數的函數。arguments.callee.caller
方法,但在異步方法的情況下似乎不起作用。此外,由於性能和安全原因,此功能似乎已被棄用。
注意:我沒有看這個信息用於調試目的。我已經意識到開發人員工具中提供的Async調用堆棧,Initiator和console.trace解決方案。
+1感謝阿林,你知道創造了很多錯誤的對象,因爲我需要這個代碼添加到通用Ajax調用的任何性能意味着什麼呢?如果在功能上或技術上沒有錯誤,創建一個Error對象是否是好習慣? – Agalo
@Agalo與他們所附帶的HTTP請求開銷相比,我認爲錯誤對象的開銷可以忽略不計。 –