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

の下に与えられているフォームをHAVA 。たとえそれが偽に戻っても。私のコードを見て、論理的な間違いがあるかどうか教えてください。

+0

AJAX呼び出しが完了する前に、あなたの関数が返されます。ブロックが終了する直前に関数にreturn 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

正常終了の結果で真偽結果が返されます。これはvalidate_form()に渡されません。また、レスポンスが「OK」でない場合でも、常にtrueを返す成功ハンドラには論理バグがあります。以下のようにあなたが何かをする必要があります

:Ajaxの非同期呼び出しです

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; 
} 
関連する問題