私は、次のJavaScript関数があります。複数のajaxコールのパラメータが共有されていますか?
function makeAjaxCall(outerParameter1,outerParameter2,outerDivId,paramInput){
$.ajax({
type: "POST",
url: "some time taking LargeWebMethod or url", //will take some time in giving output
data: "{param: " + paramInput+ "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunction
});
function successFunction(result){
var innerParam1 = //some value calculated using result parameter
var innerParam2 = //some value calculated using result parameter
htmlString += //some large time consuming code using outerParameter1, outerParameter2 to generate output
htmlString += //some large value
$("#"+outerDivId).html(htmlString);
}
}
を我々はmakeAjaxCallに()を複数の呼び出しを行う大きなループを持っています。私が知っている何
for(var i=0;i<SomeLargeValue;i++){
var outerParameter1;
var outerParameter2;
var id= //some div id that we want to load with some data in next ajax call
//some code to calculate outerParameter1 and outerParameter2
var paramToSend = //some value for paramInput parameter in makeAjaxCall()
makeAjaxCall(outerParameter1, outerParameter2, id, paramToSend)
}
はパラメータouterParameter1、outerParameter2、outerDivIdとparamInputはsuccessFunction()と同様にmakeAjaxCall()内(スコープで)利用可能であることです。
successFunction()内で宣言されたinnerParam1とinnerParam2は、makeAjaxCall()内でさえ、自分自身と外部のどこにも使用できません。
以下は私の疑問です。私は混乱しています: 1. makeAjaxCall()に異なるパラメータ値(大ループから)をいくつか非同期に呼び出すと、異なるプロセス(異なる呼び出しのsuccessFunction()コード)が実行されます。それらの異なるプロセスは、パラメータouterParameter1、outerParameter2、outerDivId、paramInputを共有しますか?
最初にmakeAjaxCallを呼び出した後、コードの実行はsuccessFunction()の間にあり、makeAjaxCall()への別の非同期呼び出しはさまざまなパラメータ値で行われていると仮定すると、outerParameter1と
- このコード(同じハンドラで複数のajax呼び出しを行う)は安全ですか、それとも「汚れた読み取り」のような問題に対応しますか?
ここで何が起こるのでしょうか?踏み台か何か、スタックはどのように作られていますか?
この混乱から抜け出すのを手伝ってください。
ありがとうございます!
いいえ、それぞれのAJAX呼び出しは、あなたが渡しているパラメータ(makeAjaxCallメソッド)を取得することはありません。 – Shyju
@Shyju、それは汚れた読み込みの問題を意味せず、矛盾はありませんか? –
'data:" {param: "+ paramInput +"} "、'、 'JSON.stringify()'を使ってオブジェクトをJSONとしてエンコードします。JSONを手動で構築しようとしないでください。 – Barmar