$ .post()没时间运行?

时间:2009-02-07 06:42:30

标签: javascript jquery ajax 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. */
  });
});

2 个答案:

答案 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