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 は無限ループを助けることができますか?