を使用するときにフォームが複数回提出:
$.fn.submit_to_remote = function() {
// I use .each instead of the .submit directly so I can save
// the 'submitEnabled' variable separately for each form
jQuery.each($(this), function() {
$(this).submit(function() {
form = $(this);
if (form.data('submitEnabled') == false) { alert('disabled'); return false; }
form.data('submitEnabled', false);
$.ajax({type: 'POST', url: 'url', data: data, dataType: 'script',
success: function(script) {
alert('success')
}
})
return false;
})
})
}
$('.submit_to_remote').submit_to_remote();
だから、基本的には、上submit_to_remoteを呼び出すときにそれは通常の送信を無効にし、AJAX POSTリクエストを行います。
奇妙なことは、「無効」アラートが表示されるため、フォームが複数回転記されることです。ご覧のとおり、私はフォームオブジェクトに保存された "変数"を使用し、変数がフォームがすでにサブミットされているかどうかを確認することによってこれを防止しています。
さらにテストすると、AJAX呼び出しによって返されたスクリプトが原因と思われます。私がやっていることを少し説明してみましょう。もっと明確です。
フォームがサーバーに送信され、スクリプトが返されます。スクリプトはフォームを再度表示しますが、今回は一部のフィールドでエラーメッセージが表示されます。フォームが完全に置き換えられていることに注意してください。
スクリプトは、新しいフォームを表示すると、これを実行します。
$('.submit_to_remote').submit_to_remote();
私がしなければならないそうでなければ、あなたがもう一度送信ボタンをクリックすると、フォームが正常に送信されるので、その、無AJAX。
ユーザーがフォームを送信し、適切なエラーで返されたとします(「無効」アラートは表示されません)。それから彼はそれを再び提出する。今回は「無効」アラートが1回表示されます。今度は彼はもう一度それを提出し、今度はアラートが2回表示されます!それで...
したがって、.submitコールバックが各リクエストで何度も何度も追加されているようですが、なぜですか?
.html()を使用すると、元のフォームが幽霊か何かのままになることはありますか?
ありがとうございます!
PS:それは関連性の場合は、ここでは$アヤックスの呼び出しによって返されたスクリプトです:この奇妙な動作について
replace_content_with = 'the form and other stuff here';
$('.page-content').html(replace_content_with);
$('.submit_to_remote').submit_to_remote();
私はそれもやってみましたが、奇妙なことに、新しいフォームはAJAXの動作を持たないため、私はスクリプトに再バインドしているので動作しません... – Ivan
+1私はこれを解決策としてここに使用できました:http://stackoverflow.com/questions/12340484/duplicated-entries-to-mysql-using-jquery-ajax-and-php/12340646#12340646 –