Ich habe ein Anmeldeformular und benutze es $.ajax
, um es einzureichen.
Dies ist meine AJAX-Anfrage:
$(document).ready(function() {
$("form#regist").submit(function() {
var str = $("#regist").serialize();
$.ajax({
type: 'POST',
url: 'submit1.php',
data: $("#regist").serialize(),
dataType: 'json',
success: function() {
$("#loading").append("<h2>you are here</h2>");
}
});
return false;
});
});
In meiner Datei submit1.php überprüfe ich, ob in der Datenbank die Felder E-Mail-Adresse und Benutzername vorhanden sind . Ich möchte eine Fehlermeldung anzeigen, wenn diese Werte ohne Seitenaktualisierung vorhanden sind .
Wie kann ich dies zum erfolgreichen Rückruf meiner AJAX-Anfrage hinzufügen ?
javascript
jquery
ajax
Codingbbq
quelle
quelle
Antworten:
Das Ergebnis liegt wahrscheinlich nicht im JSON-Format vor. Wenn jQuery versucht, es als solches zu analysieren, schlägt dies fehl. Sie können den Fehler mit der
error:
Rückruffunktion abfangen .Sie scheinen JSON in dieser Funktion sowieso nicht zu benötigen, sodass Sie die
dataType: 'json'
Zeile auch entfernen können .quelle
dataType:'text'
dataType:
nicht angegeben ist, aber dasurl:
endet in.json
.$.post
Alias liefert diejson
success
Obwohl das Problem bereits gelöst ist, füge ich dies in der Hoffnung hinzu, dass es anderen helfen wird.
Ich habe den Fehler gemacht und versucht, eine Funktion wie diese direkt zu verwenden (Erfolg: OnSuccess (productID)). Sie müssen jedoch zuerst eine anonyme Funktion übergeben:
Wenn Sie keine anonyme Funktion als Wrapper verwenden, wird OnSuccess aufgerufen, auch wenn der Webservice eine Ausnahme zurückgibt.
quelle
Ich habe versucht, die dataType-Zeile zu entfernen, aber es hat bei mir nicht funktioniert. Ich habe das Problem umgangen, indem ich "vollständig" anstelle von "Erfolg" als Rückruf verwendet habe. Der erfolgreiche Rückruf schlägt im IE immer noch fehl, aber da mein Skript trotzdem ausgeführt und abgeschlossen wird, ist das alles, was mich interessiert.
In jQuery 1.5 können Sie dies auch so tun.
quelle
complete
wird immer aufgerufen, unabhängig davon, ob der Ajax-Aufruf erfolgreich war oder nicht, während ersuccess
nur aufgerufen wird, wenn der Webserver mit einem200 OK
HTTP-Header antwortet (alles ist in Ordnung).Stellen Sie sicher, dass Sie keinen Text / keine Daten drucken (Echo oder Drucken), bevor Sie Ihre JSON-formatierten Daten in Ihrer PHP-Datei generieren. Das könnte erklären, dass Sie eine erfolgreiche 200 OK erhalten, aber Ihr Erfolgsereignis in Ihrem Javascript immer noch fehlschlägt. Sie können überprüfen, was Ihr Skript empfängt, indem Sie im Abschnitt "Netzwerk - Antwort" in firebug nach dem POST submit1.php suchen.
quelle
Fügen Sie ein
alert()
in Ihrensuccess
Rückruf ein, um sicherzustellen, dass es überhaupt angerufen wird.Wenn dies nicht der Fall ist, liegt dies einfach daran, dass die Anforderung überhaupt nicht erfolgreich war, obwohl Sie es schaffen, den Server zu erreichen. Vernünftige Ursachen können sein, dass eine Zeitüberschreitung abläuft oder etwas in Ihrem PHP-Code eine Ausnahme auslöst.
Installieren Sie das Firebug-Addon für Firefox, falls Sie dies noch nicht getan haben, und überprüfen Sie den AJAX-Rückruf. Sie können die Antwort sehen und feststellen, ob eine erfolgreiche Antwort (200 OK) eingeht oder nicht. Sie können auch einen anderen
alert()
in dencomplete
Rückruf einfügen, der auf jeden Fall aufgerufen werden sollte.quelle
success
, ist sie kein Erfolg. Da die Antwort 200 OK ist, erscheint die Antwort von Tatu vernünftig. Zur weiteren Fehlerbehebung können Sie jedoch ein anderes Ereignis verwenden, das aufgerufencomplete
wird und immer aufgerufen wird, unabhängig davon, ob eine Anforderung erfolgreich ist oder nicht (success
geschieht nur, wenn die Anforderung erfolgreich ist).complete: function (xhr, status) { alert('complete: '+status); }
Ich hatte das gleiche Problem. Dies ist darauf zurückzuführen,
javascript
dassjson
bei der Rückgabe von Daten ein Datentyp erwartet wird . aber wenn Sie echo oder print in Ihrem PHP verwenden, tritt diese Situation auf. Wenn Sie dieecho
Funktion in verwendenphp
, um Daten zurückzugeben, entfernen Sie einfach diedataType : "json"
Funktion.quelle
Ich gab gültigen JSON zurück und erhielt in meinem "vollständigen" Rückruf eine Antwort von 200 und konnte sie in der Chrome-Netzwerkkonsole sehen ... ABER ich hatte nicht angegeben
Einmal habe ich, anders als bei der "akzeptierten Antwort", das Problem tatsächlich behoben.
quelle
Ich verwende XML, um das Ergebnis vom PHP auf dem Server zur Webseite zurückzutragen, und ich habe das gleiche Verhalten gehabt.
In meinem Fall war der Grund, dass das schließende Tag nicht mit dem öffnenden Tag übereinstimmte.
quelle
Ich hatte dieses Problem mit einer Ajax-Funktion, um das Benutzerkennwort von Magento wiederherzustellen. Das Erfolgsereignis wurde nicht ausgelöst, dann stellte ich fest, dass es zwei Fehler gab:
Jedes Mal, wenn ich versuchte, das zurückgebende Array mit json_eoncde () zu codieren, funktionierte die Funktion nicht, da einer der Indizes Nicht-Utf-Zeichen enthielt, die meisten davon in brasilianischen portugiesischen Wörtern.
quelle
Ich habe versucht, eine Zeichenfolge vom Controller zurückzugeben, aber warum die Steuerung zum Fehlerblock zurückkehrt, ist Ajax nicht erfolgreich
quelle
Ich hatte das gleiche Problem, als ich den Controller abfragte, der keine Erfolgsantwort zurückgibt, als mein Controller so geändert wurde, dass er ein Problem mit der Erfolgsmeldung zurückgibt. Beachten Sie die Verwendung des Lavalite-Frameworks. Vor:
das hat bei mir funktioniert
quelle
Ich hatte das gleiche Problem, das ich auf diese Weise gelöst habe: Mein Ajax:
OK. Das Problem liegt nicht bei json, sondern nur bei der PHP-Antwort. Vorher: meine PHP-Antwort war:
Jetzt:
Jetzt arbeitet mein Erfolg. PS. Entschuldigung, wenn etwas nicht stimmt, aber es ist mein erster Kommentar in diesem Forum :)
quelle
In meinem Fall war der Fehler, dass dies auf der Serverseite war und aus diesem Grund ein HTML zurückgegeben wurde
quelle
Fügen Sie auf diese Weise einen 'Fehler'-Rückruf hinzu (genau wie' Erfolg '):
Also, in meinem Fall habe ich in der Konsole gesehen:
quelle
Sie müssen sowohl den Rückruf für Erfolg als auch für Fehler deklarieren. Hinzufügen
sollte das Problem beheben
quelle
Der Erfolgsrückruf hat zwei Argumente:
Stellen Sie außerdem sicher, dass der
submit1.php
richtige Inhaltstyp-Header festgelegt ist:application/json
quelle
success
zwei Argumente erforderlich sind, scheint für die Frage völlig irrelevant zu sein. Sie können eine beliebige Anzahl von Parametern an eine Javascript-Funktion übergeben, unabhängig davon, wie viele sie in ihrer Deklaration akzeptiert. Dies ist definitiv nicht die Ursache für diese Probleme, und da keiner der Wertedata
odertextStatus
im Erfolgsrückruf verwendet wird, scheint dies der Fall zu sein sei kein guter Grund, sie überhaupt in der Funktion zu deklarieren.