PHP json_encode
Devuelve una cadena que contiene la representación JSON del valor proporcionado. php.net
pero devuelve un objeto JavaScript, no una cadena Json:
<script> var app = <?php echo json_encode($array); ?>; alert(app.name) </script>pero devuelve un objeto JavaScript, no una cadena Json:
El contexto importa, considera este código:
<?php $array = ['name' => 'John Doe']; $string = json_encode($array); var_dump($string);Ejecutar eso produce:
$ php index.php string(19) "{"name":"John Doe"}" string(19) significa que la variable es una cadena de 19 caracteres. El hecho de que la cadena pueda ser interpretada por js como un objeto es irrelevante aquí, para php está produciendo una cadena.
pero devuelve un objeto JavaScript, no una cadena Json
Te saltas algunos pasos aquí:
json_encode devuelve una cadena en PHPechoPuede ser útil reescribir el script PHP en algo que sea equivalente:
echo " <script> var app = " . json_encode($array) . "; alert(app.name) </script>"; Entonces, ahora está claro que PHP envía una cadena, que representa un JavaScript válido, encerrado en una etiqueta <script> . El JSON es solo una parte de esa cadena larga, que luego el navegador analizará, y donde un motor de JavaScript analiza la parte de JavaScript.