2017-03-16 76 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; 
}