2010-08-31 17 views
25

En mi aplicación dependo mucho de JavaScript para mejorar la interfaz de usuario, pero todos los datos provienen de una base de datos y son procesados ​​por PHP. Por defecto utilizo declaraciones 'eco' para sustituir los valores requeridos "justo a tiempo" de esta manera:¿Cuál es la forma más segura de pasar argumentos del lado del servidor PHP al lado del cliente?

var myVariable = <?php echo $myVariableInPHP ?> 

Esto, sin embargo, no me parece muy elegante y me preocupa la estabilidad y la capacidad de mantenimiento de dicho código .

¿Tengo alguna alternativa aquí?

Para el lado del servidor, estoy usando el framework Symfony 1.4 PHP.

Gracias,

+3

¿Puedo comentar sobre cómo me parece gracioso que una pregunta de más de 3 años es un duplicado de una pregunta de un mes? Es gracioso. –

+1

Esto puede realmente dejar su mente en blanco, pero la respuesta a su comentario ya fue publicada en ese nuevo hilo ... ¡antes de que usted lo pidiera! Pero en serio, la pregunta más nueva tiene mejores respuestas y mucho más puntos de vista. Este fue el correcto para marcar. – JPhi1618

+1

Me parece gracioso que la persona que escribió la pregunta duplicada 4 años después marcó este como el duplicado – CreativeMind

Respuesta

36

Mi forma favorita es:

<?php 

$var = array(
    'prop1' => 'value1', 
    'prop2' => 'value2', 
    // ... 
); 

?> 
<script type="text/javascript"> 
    var varNameSpace = <?php echo json_encode($var); ?>; 

    alert(varNameSpace.prop1); // -> 'value1' 
</script> 

Usando json_encode() asegura que los valores pasados ​​al Javascript se escaparon y bien formateados. El uso de un contenedor variable común también evita el uso excesivo del espacio global (ventana).

+2

+1 por mencionar el espacio de nombres! – Petrogad

4

Es posible que desee utilizar JSON para esto, es muy sencillo de utilizar, tanto en PHP (marque json_encode()) y JavaScript.

Se puede usar con seguridad dentro de <script> -Ejecuciones y navegadores que comprenden JavaScript. Tenga en cuenta que la función PHP no codifica < y >.

Algunos ejemplos de PHP:

$user = (object) array("name"=>"Joseph", "age"=>29, "email"=>"[email protected]"); 
echo '<script type="text/javascript"> var user = '.json_encode($user).'; </script>'; 
2

que iba a tratar de usar JSON. Aquí hay un enlace para que php.net explique cómo hacer esto.

http://php.net/manual/en/book.json.php

+2

¿Cuidar para explicar por qué me votaron negativamente? –

1

Primero de su solución funciona, pero no es una buena práctica mezclar el código del lado del cliente con el código del lado del servidor. Es una buena práctica para poner javascript en archivos .js separadas (sin PHP en ella)

me gustaría crear una primera (documentación de escritura) de la API como por ejemplo

GET 
http://localhost/getProfile?username=$username 

POST 
http://localhost/getProfile/$username 

se volverá a objetos utilizando JSON json_encode. Puede usar json-p para la comunicación entre dominios. Luego, por ejemplo, Jquery, puede obtener fácilmente los datos.

De esta forma su javascript permanecerá limpio.

+0

Lo hago con aplicaciones ExtJS. Los widgets dependen en gran medida de los datos de la base de datos y todo está en JSON. Sin embargo, ahora debe luchar contra CSRF si se supone que su sitio es seguro. – AutoSponge

0

Prefiero use_dynamic_javascript() ayudante. Lo "malo" de esto es que tienes que pensar un poco más en dividir la plantilla de renderizado y configurarla en solicitudes separadas.

Cuestiones relacionadas