J'ai créé une classe Json en php qui permet de manipuler rapidement et instinctivement les propriétés du DOM et de créer des objets json. La classe nécessite le support de json_encode() (version 5.2 de php)

Voici le code de la classe Json

  1. <?php
  2. /*
  3. * @project PhPJson
  4. * @author : Quentin Ambard
  5. * @version : 0.2
  6. * @url http://avriblog.avricot.com
  7. * @license MIT Style License
  8. */
  9. class Json
  10. {
  11. private static $json = array() ;
  12. private static $jsonDOM = array() ;
  13.  
  14. public static function add($key, $value)
  15. {
  16. JSON::$json[$key] = $value ;
  17. }
  18. public static function addArray($key, $value)
  19. {
  20. JSON::$json[$key][] = $value ;
  21. }
  22. private static function jsonGetElementDom($idElement, $property, $value)
  23. {
  24. $nbreE = count(JSON::$jsonDOM) ;
  25. $e = NULL ;
  26. for ($i=0;$i<$nbreE;$i++)
  27. {
  28. if(JSON::$jsonDOM[$i]->idElement == $idElement)
  29. $e = & JSON::$jsonDOM[$i] ;
  30. }
  31. if($e == NULL)
  32. {
  33. $e = & JSON::$jsonDOM[] ;
  34. $e->idElement = $idElement ;
  35. }
  36. return $e ;
  37. }
  38. public static function addProperty($idElement, $property, $value)
  39. {
  40. $e = JSON::jsonGetElementDom($idElement, $property, $value) ;
  41. $e->property->$property = $value ;
  42. }
  43. public static function addStyle($idElement, $property, $value)
  44. {
  45. $e = JSON::jsonGetElementDom($idElement, $property, $value) ;
  46. $e->property->styles->$property = $value ;
  47. }
  48. public static function getEncoded()
  49. {
  50. //on rajoute les modifications du dom pour qu'elles soient gerées tout à la fin par le js.
  51. JSON::$json['DOM'] = JSON::$jsonDOM ;
  52. return json_encode(JSON::$json);
  53. }
  54. public static function error($error)
  55. {
  56. $e->erreur = $error ;
  57. die(json_encode($e));
  58. }
  59. }
  60. ?>

Grace à mootools on récupère directement l'objet Json généré par php et execute directement les changements sur le DOM ! Voici un petit exemple d'utilisation avec mootools et la fonction set():

  1. var ParseurJson = function()
  2. {
  3.  
  4. this.erreur = function(_erreur){
  5. alert('ceci est une erreur :'+_erreur);
  6. }
  7. this.info = function (_info){
  8. alert('ceci est une info:'+_info);
  9. }
  10. this.DOM = function (_DOM){
  11. //On parcours tous les elements à modifier :
  12. var i=0;
  13. while(typeof(_DOM[i]) != "undefined"){
  14. //Si on modifie les proprietée de l'element
  15. if(typeof(_DOM[i].property) != "undefined"){
  16. $(_DOM[i].idElement).set(_DOM[i].property);
  17. }
  18. i++;
  19. }
  20. }
  21. this.parseJson = function (_json) {
  22. var i ;
  23. for (i in _json)
  24. this[i] (_json[i]);
  25. }
  26. this.request = function (_page, _variable){
  27. var requete = new Request.JSON({url: _page});
  28. requete.addEvent('onSuccess', this.parseJson.bindWithEvent(this));
  29. requete.post(_variable);
  30. }

Il ne vous reste plus qu'à utiliser directement la classe en PHP. Par exemple testJson.php qui sera appelé en ajax :

  1. //pour modifier le contenu innerHTML via mootools
  2. JSON::addProperty('id de l\'element à modifier', 'html', 'nouveau contenu') ;
  3. //pour modifier le src d'un element
  4. JSON::addProperty('id de l\'element à modifier', 'src', 'nouveau lien') ;
  5. //pour modifier le style d'un element
  6. JSON::addStyle('id de l\'element à modifier', 'display', '') ;
  7. JSON::addStyle('id de l\'element à modifier', 'color', '#FFF') ;
  8. //Pour envoyer une info :
  9. JSON::add('info', 'valeur de "valeurDeTest" recu : '.$_POST('valeurDeTest')) ; //fait un alert() affichant 'valeur de "valeurDeTest" recu : toto'
  10. //pour creer un objet contenant plusieurs sous-objet et les rajouter au fur et a mesure via php
  11. //A noter que vous pouvez aussi directement passer un array en utilisant addJson(), mais des fois addJsonArray() se revele bien pratique !
  12. JSON::addArray('nom de l\'array', 'var 1') ;
  13. JSON::addArray('nom de l\'array', 'var 2') ;
  14.  
  15. //on ecrit l'ensemble du json generé
  16. echo JSON::getEncoded();

et ensuite on appelle la page en ajax par exemple :

  1. var parseurJson= new ParseurJson{) ;
  2. parseurJson.request ('testJson.php', {valeurDeTest: 'toto', valeurDeTest2: 'toto2'});