2010-11-23 19 views
10

he un objeto que se parece a estoJavascript - pass objeto por correo

var obj = { p1: true, p2: true, p3: falsa }

Busco a tratar y pasar este objeto como parte de una solicitud posterior.

sin embargo, en el otro extremo (en php) todo lo que consigo es

[object Object]

¿Cómo puedo enviar un objeto a través de correos?

básicamente lo que estoy tratando de hacer es

tengo una entrada que se oculta y se crea como tal

<input id="obj" type="hidden" name="obj[]">

que es parte de una forma oculta.

cuando se pulsa un botón que tienen

$(#obj).val(obj); 
$('form').submit(); 


sugerencias Por favor, no utilizar AJAX como debo hacerlo de esta manera, ya que es para descargar un archivo creado de forma dinámica.

Respuesta

22

Es necesario para serializar/convertir el objeto en una cadena antes de enviarlo Puede usar jQuery.param() para esto.

$('#obj').val(jQuery.param(obj)); 
+1

A + primero para leer toda la pregunta, y tu respuesta también funciona perfectamente :) Aceptaré asap – Hailwood

+1

+1, y aquí hay una demostración: http://jsfiddle.net/TQEzE/ – karim79

+0

incluso funciona de forma recursiva '{a: {b: 'c', d: {e: 'f', g: 'h'} , i: 'j'} '=>' a [b] = c & a [d] [e] = f & a [d] [g] = h & i = j' – user3338098

11

Puede considerar usar la notación JSON para enviar el objeto al servidor. Si incluye un JSON parser/renderer en su página,(está integrado en todos los navegadores modernos, y también IE8 en modo estándar) puede convertir el objeto en una cadena conservando su gráfico completo de objetos. La mayoría de los lenguajes del lado del servidor ahora tienen el análisis JSON disponible para ellos (en PHP es json_decode, por ejemplo). Puede poner esa cadena en su campo de formulario oculto antes de enviar el formulario.

Ese sería el siguiente:

$('#obj').val(JSON.stringify(obj)); 
$('form').submit(); 

... y el lado del servidor vería una cadena de la forma

{ "p1" : true, "p2" : true, "p3" : false } 
+0

Por favor, lea toda la pregunta. El formulario es necesario ya que está descargando un archivo generado dinámicamente. No puede provocar la descarga de un archivo desde datos ajax. No puedo almacenar el archivo que se crea en cualquier parte tampoco, así que, generar el archivo a través de la llamada ajax y devolver una url tampoco funcionará. – Hailwood

+0

@Hailwood: No puedo creer que me haya perdido eso. Fijo. –

+0

@ T.J. Saludos, tu nueva respuesta funcionará. Sin embargo, estoy usando la respuesta de @ Matt :) (ps, obtienes un voto favorable) – Hailwood