Eine leichte Variation dieser Frage ist: Ich möchte jquery und ajax verwenden, um einem Benutzer eine Fehlermeldung anzuzeigen. aber dann, um normale Verarbeitung zu machen, wenn es keinen Fehler gibt.
Angenommen, die Methode "check" gibt eine Antwort zurück, die leer ist, wenn kein Fehler vorliegt, und die darin enthaltenen Fehler sind vorhanden.
Dann können Sie so etwas in Ihrer fertigen Funktion tun:
%Vor%Also, wie funktioniert es? Wenn die äußere Submit-Funktion ausgelöst wird, baut sie die Daten auf, die für den AJAX-Aufruf benötigt werden (hier die Funktion auf höherer Ebene). Der Aufruf ist geplant, und der Hauptthread der Operation wird sofort fortgesetzt, aber die Übergabe wird unbedingt gestoppt, sodass nichts Offensichtliches passiert.
Einige Zeit vergeht, und der AJAX-Aufruf gibt das Ergebnis der Anforderung zurück. Wenn nicht leer, wird das Ergebnis dem Benutzer angezeigt.
Wenn die Antwort leer ist, ist die Sendefunktion jedoch nicht gebunden. Dies verhindert, dass das System einen zusätzlichen Aufruf durch die äußere Sendefunktion ausführt. Die innere Submit-Funktion wird aufgerufen. Dies löst eine tatsächliche Formularübergabe an das Ziel des Formulars aus und das Leben läuft wie erwartet ab.
Sie müssen einen Rückruf durchführen.
Dieser Eintrag in den FAQ hat mir sehr geholfen, als ich genau dieses Problem hatte.
%Vor%Der Grund dafür ist, dass Sie nicht in einer AJAX-Funktion zurückkehren können.
Der obige Code funktioniert aufgrund der Art der asynchronen Programmierung nicht wie gewünscht. Der bereitgestellte Success-Handler wird nicht sofort aufgerufen, sondern zu einem späteren Zeitpunkt, wenn die Antwort vom Server empfangen wird. Wenn wir die Variable 'status' unmittelbar nach dem Aufruf von $ .ajax verwenden, ist ihr Wert immer noch undefiniert.
In diesem Fall müssen Sie eine synchrone HTTP-Anfrage durchführen, dh Sie müssen die async-Option festlegen > zu falsch.
In Ihrer Version ist die httpxmlrequest asynchron. Es kann beendet werden, lange nachdem Ihr onsubmit-Handler zurückgegeben wurde und der Onsuccess-Callback außerhalb des Kontextes des onsubmit-Handlers aufgerufen wird.
Das "return false" ist der Rückgabewert der anonymen Funktionsfunktion (result) {...} und nicht der Rückgabewert des onsubmit-Handlers.
Ich hatte dieses Problem auch, aber löste es, indem ich den Eingabe-Typ="submit" zu type="button" ändere und dann einfach deine ajax-Anfrage
mache %Vor%