jQuery.ajax とajaxQueueを使用しています。AJAX リクエストを引き起こす 2 つのイベントがあります。問題は次のとおりです。
- どちらも同じデータを使用し、それらを操作しています。
- 場合によっては、1 つのアクション (入力の変更時とボタンのクリック時) で両方を起動することもできます。
それらが一緒に起動されると、最初に入力の値を変更し、次にリクエストで新しい値を使用する必要があります。残念ながら、2 番目のリクエストで古いデータを取得しています。
この状況を示す単純なコード (イベントはありませんが、主な問題は同じです):
<input id="in" value="x"><br>
<a href="#">click</a>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="jquery.ajaxQueue.min.js"></script>
<script>
jQuery.ajaxQueue({
url: 'ajax.php',
method: 'POST',
beforeSend: function() {
console.log('long ajax start');
}
}).then(function() {
$('#in').val('y');
console.log('long ajax stop');
console.log('current input value: ' + $('#in').val());
});
jQuery.ajaxQueue({
url: 'ajax2.php',
method: 'POST',
data: $('#in').val(),
beforeSend: function(xhr, settings) {
console.log('short ajax start');
console.log('data in short ajax: ' + settings.data);
}
}).then(function() {
console.log('short ajax stop');
});
</script>
コンソールで私は得る:
long ajax start
long ajax stop
current input value: y
short ajax start
data in short ajax: x
short ajax stop
もちろんそうあるべきですdata in short ajax: y
。正しい値を得るために何を変更できますか?