jQuery セレクターから派生した変数 y があります。
function g() {
jQuery('.MyProperty').each(function(){
var x = jQuery(this);
f(x);
});
}
function f(x) {
var y = x.siblings('SomeProperty').children('SomeClass');
var myValue = random();
y.MyValue = myValue;
jQuery.ajax(
/* ... */
success: function {
if (myValue != y.MyValue) {
/// Do something!
} else {
/// Do something else!
}
}
);
}
ここで、g() が、ユーザーがボタンをクリックするたびに実行されるイベント ハンドラーであるとします。これは、連続して発射できることを意味します。f() は非同期の AJAX 呼び出しを開始するため、ブラウザは成功するまでブロックしません。また、すべての f() 呼び出しが完了した後、すべてランダムな順序で到着する可能性があります (AJAX 呼び出しではブロックされないことを思い出してください)。たとえば、次のようになります。
私が直面している問題は、各 AJAX コールバックの y が実際の DOM オブジェクトのスナップショットのように見えることです。これは、拡張による g() (および f()) への呼び出しによる摂動にもかかわらず、y.MyValue の状態が変化していないように見えるためです。 ) コールバック関数が実行される直前に発生した。
y の状態が適切に更新されるように、jQuery セレクターを更新する方法はあるのでしょうか。
編集:私の懸念を明確にするために、これはイベントキューの例です:
g() /// Sets y.MyValue to 1.5555
g() /// Sets y.MyValue to 634.34
g() /// Sets y.MyValue to 555555
AJAX call back // Reads y.MyValue as 1.5555 when it should be 555555
AJAX call back // Reads y.MyValue as 555555 which is correct
g() /// Sets y.MyValue to 4232
AJAX call back // Reads y.MyValue as 4232 which is correct
AJAX call back // Reads y.MyValue as 634.34 when it should be 634.34
これは、サーバーの応答時間に変動がある場合に発生する可能性があります。