Übergabe von PHP-JSON-Javascript: echo für json_encode vs echo json-Erklärung
Ich versuche zu schaffen, eine gemeinsame Konstanten-Datei zu teilen zwischen php und javascript, JSON zum speichern der Konstanten. Aber ich Frage mich, warum übergeben Sie die JSON aus PHP zu javascript mit json_encode()
über echo der json-Erklärung.
Sagen wir, ich habe die PHP-JSON -
<?php
$json_obj = '{"const1": "val",
"const2": "val2"
}';
?>
Googeln, es scheint der typische Weg zurück zu javascript ist die Verwendung
<?php echo json_encode($json_obj); ?>
Dann glaube ich, ich müsste so etwas wie $.getScript()
zu Lesen, die php-Datei zu bekommen $json_obj
und verwenden Sie dann parseJSON()
machen es einsetzbar in javascript.
Aber warum nicht stattdessen
<?php echo 'var json = '.$json_obj; ?>
Diese Weise alles, was Sie tun müssen, ist, laden Sie das Skript direkt, und Sie haben die json-ready to direkt verwenden.
Gibt es einen bestimmten Grund, warum es günstiger ist, zu verwenden json_encode()
dann einfach in Anlehnung an die Deklaration von javascript?
- Verwenden Sie
json_encode
auf arrays und Objekte, was Sie da haben ist nur eine Zeichenfolge, die nicht brauchen, zu codieren. - Was ist, wenn die variable, die Sie wollen, speichern Sie Ihre Daten auf client-Seite ändert seinen Namen? Was, wenn Sie wollen, verwenden Sie die gleichen Daten auf mehreren Anlässen? Was ist, wenn etwas bereits ist gespeichert in der globalen variable
json
? ... - wenn Sie ein array oder gar ein Objekt, wie stdClass-Objekt, es ist einfacher zu bedienen, die Funktionen json_encode dann eine Schleife über das array/Objekt zur Ausgabe der Inhalte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrem Fall
$json_obj
ist bereits ein string. Es ist also nicht nötig. Aber wenn Sie ein array übergeben werden soll, um javascriptjson_encode
wird Ihnen helfen, mit diesem.Es hängt alles davon ab, was Sie wollen, zu senden, vom server an den client - seien es Daten (JSON) oder code.
Zwei Ansätze:
Echo eine JSON-Datei auf einem server - dann drucken Sie Ihre JSON-Dokument und legen Sie Antwort
Content-Type
zuapplication/json
. Auf diese Weise können Sie beliebige AJAX-Bibliothek, die Sie möchten, wie$.get
- oder raw -XMLHttpRequest
etc. Es ist ein Weg der Weitergabe von Daten.Echo ein Javascript-code auf einem server und verwenden Sie dann
$.getScript
um es zu laden. Es ist eine Art der übergabe von code. Dies ist möglicherweise weniger sicher, da der code enthalten kann, die nicht nur JSON, aber auch jeden beliebigen code. Also, wenn Angreifer beeinträchtigen können, Ihren server, er könnte in der Lage sein, um push-Codes an einen client für einen remote-Ausführung.Wenn Sie möchten, übergeben von Daten nur, gehen Sie mit dem ersten Ansatz. Es ist sauberer und sicherer.
Darüber hinaus, wenn Sie jemals zu Ende schreiben frontend in der unterschiedlichen Umwelt, sagen andere Programmiersprache, Sie werden in der Lage sein, um resuse der gleichen JSON-Rückgabe Endpunkt. Es wird härter, wenn man wieder Javascript-code.
Übergeben, PHP JSON in Javascript und Lesen
var stuff = <?php print json_encode($datajson); ?>;
var arr = new Array();
arr= JSON.parse(stuff);
document.write((arr[0].cust_code );
Obwohl es scheint wie overkill für Ihr spezielles problem, ich würde für die Funktionen json_encode/parse option noch. Warum? werden Sie sich Fragen. Nun, betrachten Sie es als die Vermeidung von Doppelarbeit. Wenn Sie Kodieren,/analysieren Sie können die Konstanten in ein Objekt leicht lesbar, indem Sie PHP-code. Und das gleiche für dein JS-code.
Es einfach beseitigt die Notwendigkeit, um mit ihm hantieren.
Verwenden Sie
json_encode
wenn Sie php-array ist kein string:rufen Sie die Funktionen json_encode auf eine Zeichenfolge, die Sie erhalten:
Dem argument zu
json_encode()
sollte ein PHP-Daten-Struktur, nicht um eine Zeichenfolge, die bereits im JSON-format. Sie verwenden diese, wenn Sie wollen, eine PHP-Objekt in Javascript.json_encode
ist eine Funktion, die wandelt ein PHP-array in einen JSON-string, und nichts mehr. Da Ihr$json_obj
variable bereits einen JSON-string, keine weitere Konvertierung erforderlich ist, und Sie können ein einfaches echo aus.Ihre
$json_obj
string aus einem array würde der code so ausgesehen habenconstant.php
======================ENDE DER DATEI constant.php=======
In php können Sie den Zugriff mit
In javascript, können Sie den Zugriff mit
In der Regel das ist, was ich tun, ist der sicherste Weg, die ich gefunden habe:
JSON.parse()