Ich möchte JSON von einem PHP-Skript zurückgeben.
Echo ich nur das Ergebnis? Muss ich den Content-Type
Header setzen?
Während es Ihnen normalerweise gut geht, können und sollten Sie den Content-Type-Header festlegen:
<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
Wenn ich kein bestimmtes Framework verwende, erlaube ich normalerweise einigen Anforderungsparametern, das Ausgabeverhalten zu ändern. Im Allgemeinen kann es für eine schnelle Fehlerbehebung nützlich sein, keinen Header zu senden oder manchmal die Datennutzlast zu drucken, um sie zu betrachten (obwohl dies in den meisten Fällen nicht erforderlich sein sollte).
header('Content-type:application/json;charset=utf-8');
Ein vollständiger, netter und klarer PHP-Code, der JSON zurückgibt, ist:
quelle
Laut Handbuch zur
json_encode
Methode kann eine Nicht-Zeichenfolge ( false ) zurückgegeben werden:In diesem Fall
echo json_encode($data)
wird die leere Zeichenfolge ausgegeben, die ungültig ist .json_encode
wird zum Beispiel fehlschlagen (und zurückgebenfalse
), wenn sein Argument eine Nicht-UTF-8-Zeichenfolge enthält.Diese Fehlerbedingung sollte in PHP erfasst werden, zum Beispiel wie folgt:
Dann sollte das empfangende Ende natürlich wissen, dass das Vorhandensein der jsonError- Eigenschaft einen Fehlerzustand anzeigt, den es entsprechend behandeln sollte.
Im Produktionsmodus ist es möglicherweise besser, nur einen allgemeinen Fehlerstatus an den Client zu senden und die spezifischeren Fehlermeldungen für spätere Untersuchungen zu protokollieren.
Weitere Informationen zum Umgang mit JSON-Fehlern finden Sie in der PHP-Dokumentation .
quelle
charset
Parameter für JSON. Siehe den Hinweis am Ende von tools.ietf.org/html/rfc8259#section-11 : "Für diese Registrierung ist kein 'Zeichensatz'-Parameter definiert. Das Hinzufügen eines Parameters hat keine Auswirkungen auf kompatible Empfänger." (JSON muss als UTF-8 per tools.ietf.org/html/rfc8259#section-8.1 übertragen werden , daher ist die Angabe, dass es als UTF-8 codiert ist, etwas redundant.)charset
Parameter aus HTTP-Header-Zeichenfolge entfernt.Versuchen Sie json_encode , um die Daten zu codieren und den Inhaltstyp mit festzulegen
header('Content-type: application/json');
.quelle
Stellen Sie den Inhaltstyp mit ein
header('Content-type: application/json');
und geben Sie Ihre Daten wieder.quelle
Es ist auch gut, die Zugriffssicherheit festzulegen - ersetzen Sie einfach * durch die Domain, die Sie erreichen möchten.
Hier sind weitere Beispiele dazu: Wie kann man Access-Control-Allow-Origin umgehen?
quelle
quelle
Wie oben gesagt:
wird den Job machen. aber denken Sie daran, dass:
Ajax kann problemlos json lesen, auch wenn dieser Header nicht verwendet wird, es sei denn, Ihr json enthält einige HTML-Tags. In diesem Fall müssen Sie den Header als application / json festlegen.
Stellen Sie sicher, dass Ihre Datei nicht in UTF8-BOM codiert ist. In diesem Format wird oben in der Datei ein Zeichen hinzugefügt, sodass der Aufruf von header () fehlschlägt.
quelle
Eine einfache Funktion zum Zurückgeben einer JSON-Antwort mit dem HTTP-Statuscode .
quelle
header_remove
Es ist eine gute Idee, die http-Antwort explizit festzulegen. obwohl das Setzen des Status und dann von http_response überflüssig erscheint. Vielleicht möchten Sie auch eineexit
Erklärung am Ende hinzufügen . Ich habe Ihre Funktion mit der von @trincot kombiniert: stackoverflow.com/a/35391449/339440Die Antwort auf Ihre Frage finden Sie hier :
Es sagt.
Wenn Sie also den Header auf diesen Typ setzen und Ihre JSON-Zeichenfolge ausgeben, sollte dies funktionieren.
quelle
Ja, Sie müssen Echo verwenden, um die Ausgabe anzuzeigen. Mimetyp: application / json
quelle
Wenn Sie json von PHP benötigen, um benutzerdefinierte Informationen zu senden, können Sie diese hinzufügen,
header('Content-Type: application/json');
bevor Sie andere Dinge drucken. Dann können Sie Ihre Kunden druckenecho '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';
quelle
Wenn Sie eine Datenbank abfragen und die Ergebnismenge im JSON-Format benötigen, können Sie dies folgendermaßen tun:
Weitere Informationen zum Parsen des Ergebnisses mit jQuery finden Sie in diesem Lernprogramm .
quelle
Dies ist ein einfaches PHP-Skript, mit dem männliche Frauen und Benutzer-IDs zurückgegeben werden, da der json-Wert ein beliebiger zufälliger Wert ist, wenn Sie das Skript json.php aufrufen.
Hoffe diese Hilfe danke
quelle
Eine einfache Möglichkeit, Ihre Domänenobjekte in JSON zu formatieren, ist die Verwendung des Marshal Serializer . Übergeben Sie dann die Daten an
json_encode
und senden Sie den richtigen Content-Type-Header für Ihre Anforderungen. Wenn Sie ein Framework wie Symfony verwenden, müssen Sie die Header nicht manuell festlegen. Dort können Sie die JsonResponse verwenden .Zum Beispiel wäre der richtige Inhaltstyp für den Umgang mit Javascript
application/javascript
.Oder wenn Sie einige ziemlich alte Browser unterstützen müssen, ist dies am sichersten
text/javascript
.Für alle anderen Zwecke wie eine mobile App
application/json
als Inhaltstyp verwenden.Hier ist ein kleines Beispiel:
quelle
Wenn Sie versuchen, eine JSON-Antwort für die API zurückzugeben, oder sicherstellen, dass Sie über die richtigen Header verfügen, und sicherstellen, dass Sie gültige JSON-Daten zurückgeben.
Hier ist das Beispielskript, mit dem Sie die JSON-Antwort vom PHP-Array oder von der JSON-Datei zurückgeben können.
quelle
Sie können diese kleine PHP-Bibliothek verwenden . Es sendet die Header und gibt Ihnen ein Objekt, mit dem Sie es einfach verwenden können.
Es sieht aus wie :
quelle