2017-03-16 2 views
0

I eine Form hava die unterhalbjquery ajax onsubmit Formfehler

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

und die jquery Funktion

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 arbeitet gut, aber das Problem Form in allen möglichen Bedingungen einreicht gegeben wird . auch wenn es falsch zurückkehrt. Bitte gehen Sie durch meinen Code und lassen Sie mich wissen, wenn es irgendwelche logischen Fehler gibt.

+0

Ajax ist ein asynchroner Aufruf, wird Ihre Funktion zurückkehren, bevor vervollständigt Ajax-Aufruf. füge return false in deiner Funktion kurz vor dem Ende des Blocks hinzu. –

Antwort

1

Ajax ist eine asynchrone Funktion, was bedeutet, dass die return false, die Sie aufrufen, geschieht, nachdem das Formular übergeben wurde.

Stattdessen müssen Sie die Rückgabe false am Ende der Funktion validate_form() hinzufügen.

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

Beachten Sie, dass das Formular immer false zurückgeben sollte. Sie können die Verwendung von run_name überprüfen, um zu entscheiden, ob Sie die Ajax-Anfrage ausführen sollen oder nicht.

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

Sie geben das Wahr/Falsch-Ergebnis innerhalb des Erfolgsabschlusses zurück. Dies wird nicht an validate_form() übergeben. Sie haben auch einen Logikfehler im Erfolgshandler, der immer true zurückgibt, auch wenn die Antwort nicht 'OK' war.

Sie benötigen, wie etwas zu tun:

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; 
}