11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Alors que je voulais construire un tableau associatif en javascript, je suis tombé sur ce message dans lequel il est précisé par Julien Royer que pour créer un tableau associatif en javascript il était fortement conseillé d'utiliser un objet.

Résultat :

var tab = {'1':'','2':'','3':''};
tab['1'] = {'bla':'','bli':'','blu':''};
tab['1']['bla'] = new Array('un', 'deux', 'trois');
tab['1']['bli'] = new Array('quatre', 'cinq', 'six');
...


Lorsque je le parcours, tout se passe comme il faut, je peux le modifier, etc...

Maintenant il me faut l'envoyer à un script PHP à l'aide d'ajax (j'utilise les prototypes) comme ceci :


new Ajax.Request('treatmentAjax.php', {method:'post', postBody:'data='+tab, asynchronous: false});


Le problème est que lorsque, dans mon fichier treatmentAjax.php, je fais un print_r de $_POST['data'] je me retrouve avec [object Object] et je ne sais pas du tout comment faire pour le parcourir et retrouver mes valeurs.

(J'ai également essayé en serializant, lorsque j'unserializais dans treatmentAjax.php je voyais mes valeurs dans le print_r mais elles étaient entourées de ___PHP_Incomplete_Class Object et je ne pouvais pas accéder aux données)

J'espère avoir été clair dans mon explication et je remercie d'avance les personnes qui me répondront Smiley cligne .

Solution :

Bon finalement, après quelques recherches supplémentaires je me suis rendu qu'il fallait utiliser JSON.

A l'aide des prototypes je retourne mon tab en JSON et l'envoie en Ajax, comme suit :


new Ajax.Request('treatmentAjax.php', {method:'post', postBody:'data='+$H(tab).toJSON(), asynchronous: false});


Puis, dans treatmentAjax.php :


print_r(json_decode($_POST['data'], true)); // true pour que json_decode() retourne un tableau associatif


Voilou, merci quand même, peut-être que ça aidera d'autres personnes.
Modifié par ato (06 Jul 2007 - 18:32)
Salut, je ne vois pas qu'utiliser d'autre à part un objet (en l'occurence une hashmap).

Deuxième point :

Il vaut mieux faire
var t = ['un','deux','trois']
que
var t = new Array('un','deux','trois');


Troisième point :

En JSON ton objet s'écrit comme suit

var tab = 
{
	1 : {bla:['un','deux','trois']},
	2 : {bli:['quatre','cinq','six']},
	3 : {blu:['sept','huit','neuf']}
}


Et enfin, sachez que JSON est intégré à PHP depuis sa version 5.2.0
Shinuza a écrit :

Il vaut mieux faire
var t = ['un','deux','trois']
que
var t = new Array('un','deux','trois');



Bonjour,

Merci pour ces précisions, cependant, peut-on savoir la différence entre ces deux lignes, et pourquoi préférer utiliser la première méthode ?

ato.
Salut, ato

Il n'y a aucune différence au niveau de l'interprêtation Javascript. La première version est simplement la version littérale de la seconde.

Simplement, avec JSON, tu utilises des objets littéraux.
Et puis bon c'est quand même plus clair, et plus simple Smiley cligne