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>
私は何を試してみましたか?
私は1つのアプローチは
beforeSend
方法でカスタムヘッダーを設定し使用していると常にコールバックは、パラメータとしてjqXHR
オブジェクトを受け取る知っています。しかし、メソッド名をパラメータとして送るためにすべての関数を変更することはできないので、これは適切なアプローチではないようです。arguments.callee.caller
ですが、非同期方式の場合は動作しません。また、この機能は、パフォーマンスとセキュリティ上の理由から推奨されていないようです。
注:この情報はデバッグ目的ではありません。私はすでにAsyncのコールスタック、Initiator、および開発者ツールで利用可能なconsole.traceソリューションを認識しています。
+1のおかげアリン、私は一般的なAjaxのラッパーにこのコードを追加する必要があるとして、エラーオブジェクトの多くを作成し、任意のパフォーマンスの意味を知っていますか?機能的にも技術的にもエラーがない場合には、Errorオブジェクトを作成することをお勧めしますか? – Agalo
@Agalo私が思うと、Errorオブジェクトのオーバーヘッドは、HTTPリクエストのオーバーヘッドに比べて無視できるものです。 –