私は自分のコードに2つのネストされたAJAXリクエストを持っています。ボタンが押されると発火します。私はAJAXリクエストが処理されている間、Bootstrapのロード段階を使ってボタンのテキストを "Loading ..."に変更しています。ネストされたAjaxリクエスト - 実行順序問題
問題は、内部のAJAXリクエストが完了する前にボタンがリセットされることです。
私の期待は、success
コールバック内のすべてのコードが実行された後にのみ、外側のAJAXリクエストのcomplete
コールバックが実行されることですが、それは起こっていません。
コードの簡略版は、次のようになります
$('#button').on('click', function() {
$.ajax({
url: …,
type: 'post',
data: …,
dataType: 'json',
beforeSend: function() {
$('#button').button('loading');
},
complete: function() {
$('#button').button('reset');
},
success: function(json) {
if (json['error']) {
…
} else {
$.ajax({
url: …,
dataType: 'json',
success: function(json) {
for (var delayer = 1; delayer < 2000000000; delayer++) {}
…
},
error: …
});
}
},
error: …
});
});
私はより良い私のマシンで効果をテストできるようにするには、任意の遅延ループを作成しました。それは私に約2秒の遅れを与えます。ボタンはほぼ即座にリセットされます。
それがどうやって動作するのか、そうでない場合はどうすればいいですか?
迅速な対応をありがとう!最初のAJAXリクエストのPHPハンドラがJSON配列にエラーを送信した場合、ボタンをリセットする必要があるため、このソリューションを試してみましたが、私の場合はうまくいきません。 –
コードを変更する必要があります。 if(json ['error'])ステートメントの前半に '$( '#button')。ボタン( 'reset');を追加して、問題が解決することを願っています。エラーがある場合はボタンをリセットし、エラーがなければ2番目のAJAXリクエストの後にボタンをリセットします。 – bugfroggy
私はリセット機能に小さなタイムアウトを設定しようとしましたが、何らかの理由で50ミリ秒のタイムアウトがあった場合、ボタンは50ミリ秒後にリセットされませんが、成功機能が完了した後にリセットされます私はしたいが、より良い解決策はない? –