2010-11-23 5 views
2

J'ai une variable globale que je utilise pour stocker un tas d'informations dans un projet sur lequel je travaille. C'est un objet avec différentes valeurs et j'imagine d'autres objets dedans. Par exemple ...

$.myVar { 
    currentProj : "Project 1", 
    allProjs : [], 
    toggleVar : 0 
} 

Maintenant que les pistes du programme et je fais les choses, je suis en fait l'ajout d'un tableau dans allProjs. Je veux utiliser l'index de tableau comme nom du projet, puis il contient un tas d'informations. Voici un exemple de l'apparence de l'objet après l'exécution du programme pendant quelques minutes.

(copié à partir de la console de Chrome):

$.myVar 
    Object 
    currentProj: "McB2" 
    toggleVar: 0 
    allProjs: Array[0] 
     McB1: Array[0] 
      length: 0 
      __proto__: Array[0] 
     McB2: Array[4] 
      0: "02070124" 
      1: "02030036" 
      2: "02090313" 
      3: "02090450" 
      length: 4 

Maintenant, je veux transmettre ces données à un fichier PHP en utilisant .post $ afin que je puisse le convertir en JSON et l'enregistrer sur le serveur.

Je le fais essentiellement en lançant juste:

$.post('saveJSON.php', $.myVar, function(data) { 
    $('#dumpspace').html(data); 
}); 

Pour le débogage j'ai le fichier PHP juste sortie:

print_r($_REQUEST); 

Maintenant, j'attendre un tableau multidimensionnel que je pouvais convertir en JSON, puis enregistrer, mais tout ce qu'il crache est:

Array ([currentProj] => McB2 [toggelVar] => 0) 

Donc, je peux voir que c'est ne pas envoyer la section allProj de l'objet, mais je ne sais pas pourquoi! Cela semble se montrer quand je regarde l'objet dans la console, donc je ne suis pas sûr de ce qui me manque.

Toute aide est appréciée.

Merci!

Précision

La première section, où je déclare allProjs, est-il possible que je fais quelque chose de mal là-bas? Quand je lance stringify, je me retrouve avec un résultat aussi mauvais:

JSON.stringify($.myVar) 
"{"currentProj":"McB2","allProjs":[],"toggleVar":0}" 

Répondre

2

Vous devez .stringify l'objet/tableau dans une chaîne JSON. Tous les navigateurs "modernes" le supportent nativement avec JSON.stringify(obj). Si vous avez besoin de prendre en charge la version du navigateur "plus ancienne", vous devez aller au http://www.json.org et télécharger le json2.js lib qui offre les mêmes fonctionnalités. L'inverse, si vous voulez recevoir une chaîne JSONized d'un serveur, vous devez soit dire à jQuery que vous attendez une chaîne json en passant 'json' dans votre appel $.post(), ou vous devez analyser les données reçues en accédant de nouveau à l'objet JSON. JSON.parse(json_string) retournera un objet Javascript d'une chaîne JSON passée.

+0

Merci pour la suggestion. J'ai essayé d'exécuter cela et je finis toujours par manquer la pièce allProj de l'objet. Est-ce quelque chose à voir avec la façon dont je déclare la matrice allProj à l'avance? J'ai mis à jour le post ci-dessus pour inclure la façon dont je déclare mon var global. Je soupçonne que c'est peut-être là où j'ai fait quelque chose de mal? – McB

0

Je crois que vous devez d'abord convertir votre tableau au format JSON avant de poster à PHP.

C'est la méthode que je l'ai utilisé dans le passé:

var jsonOb = JSON.stringify(yourArray); 

$.post(
"yourPage.php", 
{jsonOb:jsonOb}, 
function(r){ 
//your success response 
} 
); 

Hope this fait le frère trick!

W.

+0

Merci pour la suggestion! Stringify ne semble pas non plus afficher le résultat attendu. Fait intéressant, quand je nomme mes paires de valeurs clés, le tableau parent dit toujours la longueur de 0. Toute idée de pourquoi cela se produirait? – McB

1

J'ai trouvé mon problème. Quand je déclarais l'objet à l'origine je faisais allProj et Array en mettant []. Si je le mets comme allProj: {}, alors ça marche parfaitement! Merci pour les suggestions, aidé à affiner mon erreur.

-M

Questions connexes