Effectivement, JSON est une très bonne solution. Prototype.js, entre autres, nous permet de sérialiser les objets en JSON de manière assez succinte. Avec :
1 2 3
| var xyz = {pouet: function(){/*...*/}, id:"tagada"};
var data = [{pain:"italien", poisson:"mérou", fruits: ["banane", "pomme", "framboise"]}, {monument:"Tour de Pise", volcan:"Vésuve", matériaux:["béton", "bois", "pierre"], référence: xyz}];
// -> Object.toJSON(data) |
Ce qui nous produit :
'[{"pain": "italien", "poisson": "mérou", "fruits": ["banane", "pomme", "framboise"]}, {"monument": "Tour de Pise", "volcan": "Vésuve", "matériaux": ["béton", "bois", "pierre"], "référence": {"id": "tagada"}}]'
(Note: tu remarqueras que la fonction "pouet" de l'objet "xyz" a simplement été ignorée.)
Du côté PHP tu as une extension pour le traitement du JSON. Elle n'est pas fantastique (dès lors que tu as des propriétés protégées / privées il a du mal à les encoder naturellement si mes souvenirs sont bons) mais elle te permettra ceci par exemple :
1 2 3
| <?
$data = JSON_decode($_POST['data']);
?> |
$data sera alors un POPO (Plain Old PHP Object - ahah
) contenant les données expédiées par le client.
Tu peux bien sûr faire ça dans l'autre sens en utilisant JSON_encode($data) et si tu spécifies ton header convenablement ("application/json" par exemple) tu pourrais récupérer simplement ça de l'autre côté, comme par exemple :
1 2 3 4 5 6 7 8 9 10
| var request = new Ajax.Request(path, {
parameters: {/*...*/},
onSuccess: function(response) {
var data = response.responseJSON;
// Là, si %data% n'est pas nul tout s'est bien passé et tu as un bel objet prêt à l'emploi !
},
onException: function(response, exception) {
throw exception; // ou mieux si t'es inspiré ;)
}
}); |
Partager