0

ajax リクエストが完了するまで待機するには、フォームの送信メソッドをオーバーライドする必要があります。同時に、Ajax リクエストは進行状況インジケーターを表示するために非同期である必要があり、また、応答の受信後にデフォルトのフォーム ハンドラーを継続する必要があります。

フォーム送信結果はブラウザーの新しいタブで開く必要があるため、event.preventDefault() を使用してから手動で form.submit() を呼び出すことはできません。form.submit() がコードから呼び出される場合、一部のブラウザー (つまり chrome) は新しいタブ/ウィンドウをブロックします。

わかりやすくするための擬似コード:

$('#form').submit(function(e) {
  var result;
  startIndicator();
  asyncAjaxCheckResults();  // ajax complete handler changed 'result' var
  stopIndicator(); // stopping indicator after async ajax will be completed

  // continue with default submit behavior if we received desired result
  // else prevent executing 
  if (result !== 'desired result') {
    e.preventDefault();
  }
});

この場合、何かできることはありますか?多分 $.deferred は無限ループを助けることができますか?

4

2 に答える 2

0

同期ajax呼び出しが必要だと思うので、スクリプトは応答を待ってから実行を続けます。

$ .ajax({

..。

async:false、

..。

});

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

于 2013-02-03T12:17:07.523 に答える
0

別の方法は、送信ボタンにクリックイベントを追加する代わりに、フォームにイベントを送信し、ajaxを送信してevent.prevenrDefaultを使用し、ajax成功コールバックでフォーム送信を起動します-$('#form')。submit()。

于 2013-02-04T16:47:55.083 に答える