$ .post()没有时间运行?

我正在尝试在提交表单之前将数据从表单发送到外部脚本,但我似乎无法获取数据到达外部脚本,除非我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. */ }); }); 

我今天碰到了同样的问题。 就像Marc所说,这是因为ajax调用是异步的。 最简单的解决方法是使其同步。

在任何ajax调用之前使用.ajaxSetup():

 $.ajaxSetup({async: false}); 

发送到两个端点

我会尝试这样的东西,而不是使用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的情况下让表单正常运行。

但是,由于如果禁用了 JavaScript,您的所有JavaScript都不会运行,因此您不必担心在submit函数中改变行为。

你可以把你的return false; 声明或使用

 $("#mainForm").submit(function(e){ // all your existing code e.preventDefault(); } 

这将使表单不会正常提交,而是在启用 JavaScript时使用$.post方法。 如果它被禁用 ,它将正常提交。

如果您希望事件冒泡正常继续,则优先使用preventDefault return false ,但保持默认浏览器操作不会继续。 return false相当于调用e.preventDefault(); e.stopPropagation(); e.preventDefault(); e.stopPropagation();