外部で宣言された変数:
var total=0;
on success of AJAX{
total++;
alert(total);// gives value
}
alert(total)// gives zero value
ここでは、合計値を0にしています。
外部で宣言された変数:
var total=0;
on success of AJAX{
total++;
alert(total);// gives value
}
alert(total)// gives zero value
ここでは、合計値を0にしています。
リクエストajax
はおそらく非同期です。これは、応答が返される前alert
に発生することを意味します。
応答に依存するコード(アラートなど)onreadystatechange
は、ハンドラーに配置する必要があります。
実際に何が問題なのかは不明ですが、典型的な非同期の混乱のように聞こえます。XMLHttpRequest
デフォルトでは、非同期を実行し、イベントが発生するとコールバックが発生します(readyState 4など)。
したがって、alert()
ajaxハンドラーが起動する前に、ステートメントが検出される可能性があります。
したがって、簡単な解決策は、それalert()
を.onreadystatechange
それぞれ.onload
のイベントハンドラーに移動し、を処理するパーツの一番下に移動することsuccess
です。
最悪の解決策は(誰もそれを推奨しない場合でも) 、同期XMLHttpRequest
として設定することです。つまり、リクエストが実行されている間、リクエストが終了するまで、ブラウザとそのUIスレッドはロックダウンされます。