Wann sollte ich return true/false, AJAX und Wann soll ich echo "true"/"false"
Irgendwie habe ich es verwirrt mich.
Irgendwie hab ich es in meinem Kopf, dass, wenn man PHP mit AJAX ($.post), Sie hatte das echo zurück "true" oder "false" anstatt true/false. Ich sehe jetzt, dass ist nicht der Fall, aber kann jemand break it down für mich?
Ist es, dass es ein problem gibt, testen boolean? Wie hier
...
$.post('ajax/doThing',{data: data},
function(response) {
if(response) {
doThis();
}else{
doThat();
}
Ist ein problem, Fall, richtig? Hier kann ich nicht return true/false, sondern ich muss echo einen string zurück, und testen Sie die Zeichenfolge, ja?
if(response === "true")
Aber ich habe gesehen, boolean true/falses kehrte zu ajax-Funktionen. Was nutzen diese, wenn Sie nicht testen kann ein boolescher auf der AJAX-Seite? Und warum kann nicht ajax testen boolean?
Oder bin ich immer noch verwirrt?
BEARBEITEN
Wollte nur danke allen für Ihre guten Antworten. Ich bin jetzt +2 smrter.
InformationsquelleAutor K.K. Smith | 2013-02-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie sich auch mit der Rückkehr HTTP-Fehler-codes anstelle der Rückgabe ein "Erfolg" - Antwort (HTTP-status-code 200), wenn die Anfrage war nicht wirklich erfolgreich, und verwenden Sie dann eine
error
callback zu verarbeiten erfolglose Anfragen.Aber wenn Sie wollen, um mit status-code 200 (und viele Menschen tun):
Die übertragenen Daten zwischen dem client und dem server ist immer text. Der trick ist, um sicherzustellen, dass der client und server einigen sich auf wie die client sollte Deserialisieren der text verwandeln, der nach Erhalt). In der Regel könnten Sie eines von vier Dingen:
HTML (wenn es sich auf das Auffüllen von Seitenelementen)
JSON (wenn Sie möchten eine leichte, schnelle Möglichkeit, um Daten zu senden client)
XML (wenn Sie möchten, eine schwerere Gewicht, schnelle Möglichkeit zum senden von Daten an den client)
Klartext (für was auch immer Sie wollen, wirklich)
Was der Klient tut, wird davon abhängen, was
Content-Type
header, die Sie in Ihrem PHP-Seite.Meine Vermutung ist, dass Sie mit jeder der mehreren content-Typen, die am Ende die Weitergabe der Daten als string an Ihren Rückruf. Der string
"true"
ist truthy, aber so ist das string"false"
(nur leere Saiten sind falsey).Lange Geschichte kurz: ich würde wahrscheinlich verwenden Sie diese in meinem PHP:
...und die Rückkehr dieser text von ihm:
oder
...und dann in Ihre Erfolgs-handler:
Alternativ können Sie die Rückgabe einem
Content-Type
vontext/plain
und verwenden...aber das ist eine Art von hand-zu Deserialisieren, wo Sie bekommen konnte, die Infrastruktur, um es für Sie tun.
Es ist nicht zu erraten, die Antwort geben, es sei denn, Sie senden Header vom server. Man kann sagen, jQuery, was Antwort geben zu erwarten:
$.post(action, payload, callback, responseType);
durch die Angabe "json" responseType, jQuery, wird automatisch versucht, drehen Sie die Antwort in ein JSON-Objekt.Sowohl T. J und Bergi (unten) die richtigen Antworten auf dieses Thema, denke ich.
Ich würde echo zurück-ein einfacher string, oder die Funktionen json_encode ein array oder ein Objekt. Habe ich gerade "Glück", dass scheint alles geklappt zu haben?" Ein wenig, Ihren web-server ist wohl Standard zu
text/html
für PHP-Seiten, und diese Durchlaufen als string an die Erfolgs-handler, also, wenn es wirklich JSON und Sie analysieren es als JSON, war es Recht harmlos, es war mit dem falschen content-type.Re Ihre Fragen über status-codes, ich habe es gesehen, gut argumentiert. Wenn Sie ein nicht-200-Statuscode 404 wäre eine angemessene Antwort-code, wenn Sie Taten, eine
GET
für Informationen über einen Benutzer und die Benutzer-ID/name/whatever gegeben, die in der Anforderung ist ungültig. Manchmal sind die Leute verwenden, die 500, aber das ist für unexpected Problemen, so dass, wenn der Benutzer liefert die Benutzer-ID/name/was auch immer, es ist nicht angemessen (wir erwarten, dass die Nutzer, um die Dinge falsch). Ich benutze 200 und eine app-Ebene Erfolg/scheitern Flagge, die auf der Theorie bin ich die Trennung betrifft (HTTP vs. app), aber wieder, ich habe es gesehen, gut argumentiert.InformationsquelleAutor T.J. Crowder
Sollte das Skript entweder eine Antwort zurück, die übersetzt in ein JavaScript-äquivalent zu Ihrem PHP-Variablen, um solche Vergleiche zu ermöglichen oder Verwendung eines HTTP-status-codes zu vermitteln, einen Fehler.
Response-handling
jQuery.ajax()
und Freunde die Antwort interpretieren (automatisch), basierend auf der Antwort-Header, die Sie senden, sei es XML, JSON, etc.Den code unten gibt eine JSON formatierte Antwort:
Die Ausgabe an den browser gesendet wird sieht wie folgt aus:
In Ihrem Erfolgs-handler können Sie nun den folgenden code verwenden:
Fehlerbehandlung
jQuery.ajax()
kann auch mit HTTP-status-code Antworten, andere als die reguläre200 OK
, z.B.:Diese wird aufgerufen, Ihre Fehler-handler:
Technisch, nur
true
oderfalse
auf seine eigene, ist ungültig JSON. Die top-Ebene eines JSON-Dokument muss ein Objekt oder ein array. Nurtrue
oderfalse
auf Ihre eigenen ist ein gültiges JSON fragment, aber nicht ein gültiges JSON-Dokument (und einige Parser sind wählerisch).Nicht genau. AJAX-Aufrufe geben einen string zurück. Der client (Ihr browser) übersetzt die Zeichenkette. Standardmäßig jQuery
$.post()
- Methode übersetzt, die Zeichenfolge inplain text
. Daher, wenn Sie die Ausgabe eines Strings aus PHP, erhalten Sie eine nur-text-string in jQuery. Sie haben jedoch die option, um anzugeben, auf die$.post()
Methode, die Sie erwarten, dass einjson
Antwort.You need to learn the difference between a string and a boolean
.Der Unterschied ist in den Headern, die Sie senden;
application/json
hat eine andere Bedeutung als einfach nur text.Wenn Sie
return false
aus PHP, dann nicht ausgegeben, um die Antwort zurück an den client von dem server, weilreturn false
keine Ausgabe, nichts.InformationsquelleAutor Ja͢ck
Alles hängt von Ihrem server-Antwort. Wenn Sie entsprechenden MIME-Typen, jQuery möglicherweise automatisch
JSON.parse()
die Antwort für Sie, vorbei an der booleantrue
um Ihren Rückruf. Wenn es nicht erkennt, JSON, wird es passieren das textuelle Ergebnis"true"
die Sie brauchen, um zu vergleichen, gegen:InformationsquelleAutor Bergi
Ajax-Aufrufe erwartet wird ein text zurückgegeben, indem Sie Ihre Skripte, wenn du nach einer php-bool, wird es nicht ausgegeben werden, Sie müssen also echo "etwas", und Ihr nicht "true" oder "false"
"zurück, wenn man eine php-bool, wird es nicht ausgegeben werden" Sicher, es wird. PHP ist Ausgang Funktion schalten Sie es in einen string und senden Sie es. Diese Antwort ist auch sehr vage und bietet keine wirkliche Anleitung, wie das problem zu lösen, bin ich überrascht zu sehen, dass es so viel von Ihnen positiv bewertet werden.
Ich denke er meint
return true;
im Gegensatz zuecho true;
InformationsquelleAutor phpalix