2 つのエンドポイントへの送信
を使用する代わりに、このようなことを試してみますasync: true
。非常に複雑ですが、インターフェイスがフリーズすることはありません。
$(document).ready(function(){
// Handle Form-Submission
$("#mainForm").submit(function(e){
e.preventDefault();
var $form = $(this);
if($form.data('submitting')) return; // Avoid double submissions
$(':submit').attr('disabled','disabled'); // Disable the submit button
// Reset Error Array
errors = new Array();
/* Validation Code Removed - Not Relevant */
// Check if errors exist
if (errors.length > 0) {;
$(':submit').removeAttr('disabled'); // Enable the submit button
return false;
} else {
$("div.errors").html("");
$form.data('submitting',true); // Flag that a submission has started
$.post("post.php",{
"First Name":name_first.val(),
"Last Name":name_last.val(),
"Home State":home_state.val(),
"Primary Email":email_primary.val()},
function(){
// remove our special handler and submit normally
$form.unbind('submit').submit();
}
);
}
});
});
元の回答
$.post
JavaScriptが有効になっている場合に使用したいが、JavaScriptを無効にしてフォームを正常に機能させたいというハングアップがあるようです。
ただし、JavaScriptが無効になっていると実行されないため、関数の動作の変更について心配する必要はありませんsubmit
。
return false;
ステートメントを残すか、使用することができます
$("#mainForm").submit(function(e){
// all your existing code
e.preventDefault();
}
これにより、フォームが正常に送信されなくなり、代わり$.post
に JavaScript が有効になっているときにメソッドが使用されます。無効にすると、通常どおり送信されます。
preventDefault
return false
イベントのバブリングを通常どおり継続させたいが、デフォルトのブラウザー アクションは継続させない場合は、このオプションを使用することをお勧めします。return false
を呼び出すのと同等ですe.preventDefault(); e.stopPropagation();