代码之家  ›  专栏  ›  技术社区  ›  Sampson

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

  •  3
  • Sampson  · 技术社区  · 15 年前

    我试图在提交表单之前将数据从表单发送到外部脚本,但似乎无法获取数据以访问外部脚本,除非 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 回复  |  直到 9 年前
        1
  •  8
  •   Peter J    15 年前

    我今天碰到了同样的问题。正如马克所说,这是因为Ajax调用是异步的。最简单的解决方法是使其同步。

    在任何类似Ajax调用之前使用.ajaxsetup():

    $.ajaxSetup({async: false});
    
        2
  •  2
  •   Doug Neiner    15 年前

    发送到两个端点

    我想试试这个而不是用 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();
    }
    

    这将使表单无法正常提交,而是使用 邮局 当javascript为 启用 . 如果是 残疾人 正常提交。

    preventDefault 优先于 return false 如果希望事件冒泡继续正常,但不继续默认的浏览器操作。 返回假 等同于呼叫 e.preventDefault(); e.stopPropagation();