0

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。正しい値を得るために何を変更できますか?

4

1 に答える 1

0

次のように、両方のリクエストにcache: falseを追加してみてください。

jQuery.ajaxQueue({
    url: 'ajax2.php',
    cache: false,
    ...

http://api.jquery.com/jQuery.ajax/

于 2013-09-10T22:42:57.410 に答える