Foros del Web » Programando para Internet » Javascript »

Enviar array desde javascript a php

Estas en el tema de Enviar array desde javascript a php en el foro de Javascript en Foros del Web. Hola a todos, Tengo un array que debo enviar a otra página que tratará este array con php. El array lo creo desde javascript y ...
  #1 (permalink)  
Antiguo 13/01/2010, 10:11
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Enviar array desde javascript a php

Hola a todos,

Tengo un array que debo enviar a otra página que tratará este array con php.
El array lo creo desde javascript y se lo assigno a un input hidden para que se envíe al hacer el submit por método post.
Mi problema está en que no me envía el array como tal sino que me lo envía como string, es decir, todos los valores del array separados por coma.

He estado buscando y he leído por el foro que una solución es enviarlo así y en la página php hacer un explode de la variable recibida para tratarla como un array, este método me funciona pero me surge la duda de si el array tiene muchos valores, al enviarlo como string y por post pueda darme algún problema, ¿puede pasar?

También he encontrado que otra solución es utilizar json para codificar el array en javascript y en la página php usar json_decode para decodificarla, esta solución me ha llevado a que haciendo en javascript un eval de la variable ya me la enviaría así pero no es el caso.

Página inicial
Código Javascript:
Ver original
  1. function onSend(form)
  2. {
  3.      var mails = new Array("mail1", "mail2","mail3");
  4.      alert(mails); //Este alert me muestra mail1,mail2,mail3 y no Array como yo esperaba.
  5.       input = document.createElement('input');
  6.       input.type = 'hidden';
  7.       input.name = 'users';
  8.       //input.value = eval('(' +mails+ ')'); //Usando eval no me funciona
  9.       input.value = mails;
  10.       form.appendChild(input);
  11.       form.submit();
  12. }

Código HTML:
Ver original
  1. <form name="form_newsletters" method="post" action="mipagina.php">
  2.       <button onclick="onSend(this.form);" >Enviar</button>
  3. </form>

Página php
Código PHP:
Ver original
  1. var_dump($_POST['users']); //Sale de tipo string: mail1, mail2, mail3

¿Alguien podría decirme como utilizar bien json en javascript para enviar como array mi variable? o el hecho de enviarlo como string y hacer un explode ¿me puede dar problemas si el array tiene por ejemplo 100 valores?

Gracias de antemano
__________________
Perdida en el mundo del conocimiento
  #2 (permalink)  
Antiguo 13/01/2010, 10:13
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Enviar array desde javascript a php

solo he leido el titulo, de modo que no estoy muy seguro de que trata el tema. en todo caso, aqui otro tema que se creo hoy pasar array javascript mediante php y quizas te interese. ahora mismo no puedo leer todo tu tema pero regresare pronto.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 13/01/2010, 10:35
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Enviar array desde javascript a php

Hola zerokilled,

Primero de todo muchas gracias por contestar tan rápido, el post que me has enviado me ha sido de ayuda, debe ser uno de los pocos que no había visto :(

El caso es que la solución que da panino es algo más compleja de lo que yo necesito, ya que mi array es un array numérico y no asociativo y me pregunto que ventaja hay de serializarlo yo manualmente sobre enviar los valores separados por comas y luego hacer el explode en la página php.
A mi modo de ver no tengo necesidad de serializarlo en este caso ¿no? corrigeme si me equivoco. Esto me lleva a mi pregunta inicial, si lo envío como string puede darme problemas si hay muchos valores en el array? este tema me preocupa ya que lo que quiero enviar son direcciones de correo para enviar a éstas boletines de notícias.

Gracias de nuevo
__________________
Perdida en el mundo del conocimiento
  #4 (permalink)  
Antiguo 13/01/2010, 11:09
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Enviar array desde javascript a php

bien, ya he leido tu tema. no creo que tengas problema. lo que si puede suceder es que recibas algun caracter representado de alguna otra forma. por ejemplo el arroba (@) representado como %40 el cual es el equivalente en hexadecimal. esto es normal si pasas los datos por GET, por POST no se si sucede igual.

como detalle adicional. una vez trate un tema en otro foro donde se reportaba que el valor enviado no llegaba completo. por ejemplo, un string bien largo se reducia a los primeros 256 caracteres. realice una investigacion si el estandar HTTP u otra entidad definia algun limite maximo para la cantidad de caracteres a enviarse. en base a la investigacion, la conclusion fue que los estandares no definen ningun limite pero los navegadores de alguna forma u otra le imponen un limite por algun proposito. en adicion, los navegadores limitaban mas el metodo GET que el POST. es decir, por ejemplo, por GET un navegador puede enviar hasta 512 caracteres pero por POST puede enviar mucho mas. pero recuerda, el estandar no impone el limite, sino el propio navegador y en cada uno varia.

en general, no creo que tengas problema. tampoco veo mal descomponer un array de javascript y en php componerlo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 13/01/2010, 11:28
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Enviar array desde javascript a php

Gracias de nuevo por tu rápida respuesta, me ha sido de gran ayuda. Al final lo enviaré como string y haré un explode para tratarlo en php. Acerca de los carácteres especiales, con método POST no existe ningún problema y las direcciones de correo se reciben correctamente.

Sobre lo del límite del string, ya había leído que esto pasaba con el método GET pero no sabía si con el método POST también existia este problema ni que dependia del navegador, muchas gracias por la aclaración.

Por otro lado, una vez resuelto mi problema, podrias orientarme a como hacer ésto mismo con json en lugar de con el método que he utilizado? no lo he usado nunca pero intuyo que debe ser más limpio y eficaz.
Y sabes si utilizando json también existe el problema del límite de longitud? Seguramente me vuelva a encontrar en el mismo caso y quisiera poder barajar diferentes soluciones cuando llegue el momento.
__________________
Perdida en el mundo del conocimiento
  #6 (permalink)  
Antiguo 13/01/2010, 12:26
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Enviar array desde javascript a php

te soy honesto. tengo conocimiento lo que es JSON pero en mi experiencia nunca lo que utilizado para enviar datos, ya sea desde cliente-servidor o servidor-cliente. debido a mi posible ignorancia, puede que falle en algo. por ende, me basare en lo que me parece obvio y en lo poco que he leido acerca del tema.

en todo caso, en el sentido mas puro JSON no es nada mas que uno o varios objetos construido con sintaxis literales. por ejemplo, en el siguiente codigo puedes ver que no se utilizan las super-clases para crear los diferentes objetos, como por ejemplo Array y Object. esto es gracia a que el lenguaje admite sintaxis literal.
Código:
user = {
name: "SUSMO",
id: 230925,
message: 128,
url: "http://www.forosdelweb.com/miembros/susmo/",
friends: [{
	name: "Malenko",
	url: "http://www.forosdelweb.com/miembros/malenko/"
	}, {
	name: "manzarinaa",
	url: "http://www.forosdelweb.com/miembros/manzarinaa/"
	}, {
	name: "stone_neo",
	url: "http://www.forosdelweb.com/miembros/stone_neo/"
	}
],
private_message: false,
public_profile: true
};
¿como se utiliza para enviarse este dato desde el cliente al servidor?
como ya se explico en el tema pasar array javascript mediante php, javascript no tiene ningun tipo de conexion con lenguajes de servidor. de modo que no es posible pasar esa informacion como objeto directamente al servidor. para ello es necesario convertir ese objeto a un tipo de dato que ambos lenguajes comprendan, el cual naturalmente son los string. por tanto, no importa la interaccion de las aplicaciones (si cliente-servidor o servidor-cliente) ni los metodos de envios (GET, POST, AJAX) es necesario descomponer ese objeto a string. para ello se utiliza una funcion especial que basicamente genera el codigo fuente pero en forma de string. una vez descompuesto esta listo para ser enviado, y aqui de nuevo puede presentarse las limitaciones que antes comente.

¿metodos de envio?
se me ocurre que a traves de un formulario lo puedes enviar. basicamente la misma forma como hicistes con el array, asignando el valor en un campo oculto. tambien puedes enviarlo por AJAX. particularmente con AJAX, si usas algun framework, tienes la ventaja que ese dato JSON puedes constuir los valores a enviarse de forma mas manejable. me explico utilizando el mismo ejemplo del codigo. con una funcion especial se puede preparar el string de la siguiente forma para ser enviado, fijate que tiene el mismo formato que los datos por URL. no es exactamente de esta forma pero es una posible.
Código:
name=SUSMO&id=230925&message=128&url=http://www.forosdelweb.com/miembros/susmo/&friends_name[]=Malenko&friends_url=http://www.forosdelweb.com/miembros/malenko/&friends_name[]=manzarinaa&friends_url[]=http://www.forosdelweb.com/miembros/manzarinaa/&friends_name[]=stone_neo&friends_url[]=http://www.forosdelweb.com/miembros/stone_neo/&private_message=0&public_profile=1
luego en el servidor no necesitas analizarlo como JSON, sino que directamente por $_POST o $_GET puedes leer los datos. pero en el primer caso, si se envia el JSON serializado en un camp, tienes que usar la funcion para analizar JSON.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 13/01/2010 a las 12:31
  #7 (permalink)  
Antiguo 14/01/2010, 05:02
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Respuesta: Enviar array desde javascript a php

Hola zerokilled,

De nuevo tu respuesta me ha sido de gran ayuda y me ha quedado más claro como trabajar con JSON y como funciona.
Ahora solo me falta ponerlo en práctica y bueno, descubrir como has sabido la estructura de mi perfil en JSON :P

¡¡Saludos y gracias!!
__________________
Perdida en el mundo del conocimiento
  #8 (permalink)  
Antiguo 14/01/2010, 05:40
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Enviar array desde javascript a php

Cita:
descubrir como has sabido la estructura de mi perfil en JSON
con un poco de ingenio y organizacion puedes estructurar cualquier cosa en JSON. la estructura de datos tu la puedes hacer como guste, pero en la practica basicamente los datos se organizan segun su relacion. no se que nombre lleva ese tipo de practica, quizas se le pueda decir diseño de datos. si trabajas con base de datos, te sera familiar y debe ser un sentido extra que debe llevar la persona.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: enviar, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:13.