entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Quiero pasar datos desde php al html generado usando un campo input oculto de forma que en el "value" haya una cadena json.

En el lado del servidor tengo:

 $cars = array('Volvo','BMW','Toyota');
 $tmpArray['COCHES'] = json_encode( $cars ) ;

y este array $tmpArray lo paso a un campo input oculto para poder manejar los datos con JavaScript o jQuery.

Lo que obtengo en el html generado es esto:

    <input type="hidden" name="COCHES" value="["Volvo","BMW","Toyota"]">

Obviamente las dobles comillas seguidas corrompen la sintaxis.
De hecho aparece en rojo cuando miro el código fuente desde Firefox.

¿Hay alguna forma correcta de hacer lo que intento?

2 Respuestas

3votos

sebaperez Puntos920

No es necesario que tomes los datos desde un input para manipularlos en js.
Intenta en PHP:

$cars = array('Volvo','BMW','Toyota');
echo("<script>var coches = " . json_encode($cars) . ";</script>");

En JavaScript solamente manipula la variable coches, por ejemplo:

alert("Existen " + coches.length + " coches");

Esto te sacara del apuro, aunque no es una muy buena practica.

Intenta hacer un request desde JavaScript mediante AJAX a una pagina que devuelva directamente el JSON y parsealo como la respuesta del request.
Probablemente esto te ayude: http://www.w3schools.com/php/php_ajax_php.asp

0voto

PacoRuiz comentado

Para pasar algunas variables sueltas es correcto,
pero busco hacerlo específicamente con los campos input.

Trabajo con HTML5 Builder y estos campos vienen como una propiedad de la clase page con la que es muy cómodo trabajar. Aunque ¡tomo nota!

0voto

sebaperez comentado

Disculpa, te entendi mal entonces.
Podes hacerlo con addslashes().

Ejemplo:

$cars = array('Volvo','BMW','Toyota');
$tmpArray['COCHES'] = addslashes( json_encode( $cars ) );

Output:

[\"Volvo\",\"BMW\",\"Toyota\"]

-1voto

elporfirio Puntos2570

Hola en ves de utilizar esto:

<input type="hidden" name="COCHES" value="["Volvo","BMW","Toyota"]">

puedes generar mejor varios input asi:

<input type="hidden" name="COCHES[]" value="Volvo">
<input type="hidden" name="COCHES[]" value="BMW">
<input type="hidden" name="COCHES[]" value="Toyota">

al recobrarlos seria por COCHES[0], COCHES[1], COCHES[2]

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta