submit form stoppt nicht in jquery ajax call

8

Ich habe folgenden Code:

%Vor%

Wenn der Rückgabewert ajax wahr ist, muss das Formular die Übermittlung stoppen.

Aber es stoppt das Formular nicht.

jede Hilfe bitte.

    
Ray 30.04.2009, 00:49
quelle

6 Antworten

15

Ich nehme an, Sie haben etwas wie:

%Vor%

Sie möchten return false (oder rufen event.preventDefault() ) in der Ereignisbehandlungsfunktion selbst und nicht im AJAX-Aufruf auf, wie zum Beispiel:

%Vor%     
DarkWulf 30.04.2009 00:55
quelle
7

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.

    
Jim Penny 27.08.2010 17:03
quelle
2

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.

    
Ólafur Waage 30.04.2009 00:54
quelle
1

Sie können diesen Code nicht in eine Funktion oder in die Vorübermittlung eines Formulars einfügen. Die Funktion success gibt ihr Ergebnis zurück an den Kontext jQuery ajax, NICHT an den Kontext form submit.

    
cgp 30.04.2009 00:55
quelle
1

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.

    
VolkerK 30.04.2009 00:53
quelle
1

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%     
Patrik Potocki 12.08.2009 09:49
quelle

Tags und Links