2010-11-23 5 views
10

j'ai un objet qui ressemble à cecijavascript - pass objet par courrier

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

Je cherche à essayer et passez cet objet dans le cadre d'une demande de publication.

cependant à l'autre bout (en php) tout ce que je reçois est

[object Object]

Comment puis-je envoyer un objet par la poste?

essentiellement ce que je suis en train de faire est

J'ai une entrée qui est caché et est créé comme si

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

qui fait partie d'une forme cachée.

quand un bouton est pressé j'ai

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


vous plaît aucune suggestion d'utiliser ajax comme je dois le faire de cette façon car il est de télécharger un fichier créé dynamiquement.

Répondre

22

Vous devez sérialisation/convertir l'objet à une chaîne avant de le soumettre. Vous pouvez utiliser jQuery.param() pour cela.

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

A + premier à lire toute la question, et votre réponse fonctionne parfaitement :) Acceptera Asap – Hailwood

+1

+1, et voici une démo: http://jsfiddle.net/TQEzE/ – karim79

+0

fonctionne même récursivement '{a: {b: 'c', d: {e: 'f', g: 'h'} , i: 'j'} '=>' a [b] = c et a [d] [e] = f & a [d] [g] = h & i = j' – user3338098

11

Vous pouvez utiliser la notation JSON pour envoyer l'objet au serveur. Si vous incluez un JSON parser/renderer dans votre page,(il est intégré dans tous les navigateurs modernes maintenant, et aussi IE8 en mode standard) vous pouvez convertir l'objet en une chaîne en préservant son graphique d'objet complet. La plupart des langages côté serveur ont maintenant l'analyse JSON disponible pour eux (en PHP c'est json_decode, par exemple). Vous pouvez mettre cette chaîne dans votre champ de formulaire caché avant d'envoyer le formulaire.

Cela ressemblerait à ceci:

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

... et votre côté serveur verrait une chaîne sous la forme

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

Veuillez lire toute la question. Le formulaire est nécessaire car il télécharge un fichier généré dynamiquement. Vous ne pouvez pas provoquer le téléchargement d'un fichier à partir de données ajax. Je ne peux pas stocker le fichier qui est créé n'importe où, donc générer le fichier via l'appel ajax et retourner une URL ne fonctionnera pas non plus. – Hailwood

+0

@Hailwood: Je ne peux pas croire que j'ai raté ça. Fixé. –

+0

@ T.J. Salutations, votre nouvelle réponse va fonctionner. Cependant j'utilise la réponse de @ Matt :) (ps, vous obtenez un upvote de moi) – Hailwood