我正在尝试在提交表单之前将表单中的数据发送到外部脚本,但我似乎无法获取数据到达外部脚本,除非我在表单上return false;
。
$(document).ready(function () {
// Handle Form-Submission
$("#mainForm").submit(function () {
// Reset Error Array
errors = new Array();
/* Validation Code Removed - Not Relevant */
// Check if errors exist
if (errors.length > 0) {
return false;
} else {
$("div.errors").html("");
$.post("post.php",{
"First Name": name_first.val(),
"Last Name": name_last.val(),
"Home State": home_state.val(),
"Primary Email": email_primary.val()
});
}
return false; /* Remove this line, and the $.post won't work. */
});
});
答案 0 :(得分:8)
我今天碰到了同样的问题。就像Marc所说,这是因为ajax调用是异步的。最简单的解决方法是使其同步。
在任何ajax调用之前使用.ajaxSetup():
$.ajaxSetup({async: false});
答案 1 :(得分: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();
}
);
}
});
});
原始答案
如果启用了JavaScript,您的挂起似乎是要使用$.post
,但是在禁用JavaScript的情况下让表单正常运行。
但是,由于 , / p>
您可以离开submit
声明,或使用
return false;
这会使表单无法正常提交,而是在启用启用JavaScript时使用$("#mainForm").submit(function(e){
// all your existing code
e.preventDefault();
}
方法。如果已禁用,则会正常提交。
$.post
优先于preventDefault
,但保持默认浏览器操作不会继续。 return false
相当于调用return false