2017-03-16 75 views
0

我哈瓦是下面jQuery的AJAX的onsubmit形式的错误

<form name="frm_dcg" id="frm_dcg" method="post" enctype="multipart/form-data" action="" onsubmit="return validate_form();" > 
      <div class="login-form"> 
       <div class="sign-in-htm"> 
-----------other codes------- 

赋予形式和jQuery函数

function validate_form(){ 
    var run_name = $("#run_name").val();   
     $.ajax({ 
      url: "check_folder.php", 
      type: "POST", 
      data: "run_name="+run_name, 
      success: function (response) { 
       if(response=="OK"){      
       con = confirm("File already exists.. Do you want to replace existing file?");        
         if(con==true){ 
          return true; 
         }else{ 
          return false; 
         } 
       } else{ 
        return true; 
       } 
       return false; 
      } 
     }); 
} 

AJAX的工作正常,但问题的形式在任何情况下提交。即使它返回假。请通过我的代码,让我知道是否有任何逻辑错误。

+0

Ajax是一种异步调用,Ajax调用完成之前,你的函数将返回。在块结束之前在函数中添加返回false。 –

回答

1

Ajax是一个异步函数,这意味着在表单提交后,您正在调用return false

相反,您必须在validate_form()函数的末尾添加返回false。

function validate_form(){ 
    var run_name = $("#run_name").val();   
    ... 
    return false; // <-- before the ending curly brace 
} 

请注意,窗体应始终返回false。您可以验证run_name的使用,以决定是否应该执行ajax请求。

function validate_form(){ 
    var run_name = $("#run_name").val(); 
    if (run_name.length > 5) { // just an example 
     // do ajax request 
    } else { 
     // show invalid message 
    } 
    return false; // always false so the form doesn't submit. 
} 
0

您在成功关闭中返回true/false结果。这不会被传递给validate_form()。即使响应不是“OK”,您也会在成功处理程序中出现逻辑错误,始终返回true。

你需要做这样的事情:

function validate_form(){ 
    var form_success = false; // Always fail by default 

    var run_name = $("#run_name").val(); 
    $.ajax({ 
     url: "check_folder.php", 
     type: "POST", 
     data: "run_name="+run_name, 
     success: function (response) { 
      if (response == "OK"){      
       form_success = confirm("File already exists.. Do you want to replace existing file?");        
      } 

      form_success = false; 
     } 
    }); 

    return form_success; 
}