web-dev-qa-db-de.com

Vorbeigehen PHP JSON zu Javascript: Echo Json_encode vs Echo Json Deklaration

Ich versuche, eine gemeinsame Konstantendatei zu erstellen, die zwischen PHP und Javascript freigegeben wird, wobei JSON verwendet wird, um die Konstanten zu speichern. Aber ich frage mich, warum die JSON von PHP an Javascript mit json_encode() übergeben werden, um die Json-Deklaration widerzuspiegeln.

Nehmen wir an, ich habe den PHP JSON 

<?php 

$json_obj = '{"const1": "val",
            "const2": "val2"             
                            }';

?>

Googeln, es scheint die typische Art zu sein, zurück zu Javascript zu gehen

<?php echo json_encode($json_obj); ?>

Dann glaube ich, ich müsste etwas wie $.getScript() verwenden, um die PHP-Datei zu lesen, um $json_obj zu erhalten, und dann parseJSON() verwenden, um sie in Javascript nutzbar zu machen.

Aber warum nicht stattdessen 

<?php  echo 'var json = '.$json_obj; ?>

Auf diese Weise müssen Sie nur das Skript direkt laden, und Sie haben den Json für die direkte Verwendung bereit.

Gibt es einen bestimmten Grund, warum es günstiger ist, json_encode() zu verwenden, als einfach die Deklaration an Javascript zu übergeben? 

9
roverred

In Ihrem Fall ist $json_obj bereits eine Zeichenfolge. Es ist also nicht notwendig. Wenn Sie jedoch ein Array haben, das Sie an Javascript übergeben möchten, wird json_encode Ihnen dabei helfen.

7
Tobias Golbs

Es hängt alles davon ab, was Sie vom Server an den Client senden möchten - sei es Daten (JSON) oder Code.

Zwei Ansätze:

  1. Echo einer JSON-Datei auf einem Server - dann drucken Sie Ihr JSON-Dokument und setzen die Antwort Content-Type auf application/json. Auf diese Weise können Sie eine beliebige AJAX-Bibliothek verwenden, wie z. B. $.get oder raw XMLHttpRequest usw. Dies ist eine Möglichkeit, Daten zu übergeben.

  2. Setzen Sie einen Javascript-Code auf einem Server und verwenden Sie $.getScript, um ihn zu laden. Es ist eine Möglichkeit, Code zu übergeben. Dies ist möglicherweise weniger sicher, da Ihr Code nicht nur JSON, sondern auch beliebigen Code enthalten kann. Wenn also ein Angreifer Ihren Server gefährden kann, könnte er in der Lage sein, Code für die Remote-Ausführung an jeden Client zu senden.

Wenn Sie nur Daten übergeben möchten, fahren Sie mit dem ersten Ansatz fort. Es ist sauberer und sicherer. 

Wenn Sie das Frontend in einer anderen Umgebung schreiben, beispielsweise in einer anderen Programmiersprache, können Sie den gleichen JSON-wiederkehrenden Endpunkt erneut verwenden. Es wird schwieriger, wenn Sie den Javascript-Code zurückgeben.

5
kamituel

PHP JSON an Javascript übergeben und lesen
var stuff = <?php print json_encode($datajson); ?>; var arr = new Array(); arr= JSON.parse(stuff); document.write((arr[0].cust_code );

2
Kashinath Patil

Obwohl es für Ihr spezielles Problem wie übertrieben erscheinen mag, würde ich die Option json_encode/parse trotzdem wählen. Warum? du fragst. Nun, denken Sie daran, Doppelarbeit zu vermeiden. Wenn Sie codieren/parsen, können Sie die Konstanten in einem Objekt leicht lesbar für Ihren PHP-Code behalten. Und das gleiche für Ihren JS-Code.

Es entfällt einfach die Notwendigkeit, mit ihm zu arbeiten.

1
Luc

Das Argument für json_encode() sollte eine PHP - Datenstruktur sein, keine Zeichenfolge, die bereits im JSON-Format vorliegt. Sie verwenden dies, wenn Sie ein PHP -Objekt an Javascript übergeben möchten.

0
Barmar

json_encode ist eine Funktion, die ein PHP - Array in eine JSON-Zeichenfolge konvertiert, mehr jedoch nicht. Da Ihre $json_obj-Variable bereits eine JSON-Zeichenfolge ist, ist keine weitere Konvertierung erforderlich, und Sie können sie einfach auswerten.

Um von einem Array zu Ihrem $json_obj-String zu gelangen, hätte Ihr Code so ausgesehen

$json_array = array(
    "const1" => "val",
    "const2" => "val2"
);

$json_obj = json_encode($json_array);
0
SixteenStudio

Normalerweise mache ich das, was ich am sichersten gefunden habe:

// holds variables from PHP
var stuff = {};
try {
    // stuff will always be an object
    stuff = JSON.parse('<?php echo empty($stuff) ? '{}' : json_encode($stuff) ?>');
} catch (e) {
    if (e instanceof SyntaxError)
    {
        // report syntax error
        console.error("Cannot parse JSON", e);
    }
}
// show resulting object in console
console.log("stuff:", stuff);
0
3k-

konstant.php

<?php
$array = array("const1" => "val", "const2" => "val2");
?>
<script>
var contants = <?php echo json_encode($array); ?>
</script>

======================== ENDE OF DATEI constant.php =======

In PHP können Sie mit zugreifen 

$array["<key>"]

In Javascript können Sie mit zugreifen 

contants.const1, ....
0
RAVI MONE

Sie verwenden json_encode, wenn Sie ein PHP-Array und keine Zeichenfolge verwenden:

$array = array("const1" => "val", "const2" => "val2");

echo json_encode($array);

wenn Sie json_encode für eine Zeichenfolge aufrufen, erhalten Sie:

"{\"const1\": \"val\", \"const2\": \"val2\"}"
0
jcubic