我想了解如何识别以编程方式使用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请求开销相比,我认为错误对象的开销可以忽略不计。 –