AJAX avec PHP et YUI
Étape 4 - Exemple final
Poursuivons notre exemple et créons donc un objet AjaxObject qui contiendra les méthodes auxquelles notre objet callback fera référence.
Afin d’afficher la liste des pays récupérées, nous modifierons la 2e liste déroulante en manipulant le DOM. Le script est commenté afin de bien expliquer le fonctionnement de chaque partie.
/* * Définition d'un objet Ajax */ var AjaxObject = { /* * Méthode en cas de succès */ handleSuccess:function(o){ this.processResult(o); }, /* * Méthode en cas d'échec */ handleFailure:function(o){ // Création d'un noeud <option> var option = document.createElement('option'); option.appendChild(document.createTextNode('Aucun pays')); YAHOO.util.Dom.get('pays').appendChild(option); }, /* * Méthode de traitement de résultats */ processResult:function(o){ // Vidage des <option> de la liste déroulante YAHOO.util.Dom.get('pays').innerHTML = ''; /* * Réponse XML */ if (o.responseXML) { // Récupération des éléments <pays> de la réponse var data = o.responseXML.getElementsByTagName('pays'); for(var i=0;i<data.length;i++) { /* * Création de l'élément <option> */ var option = document.createElement('option'); // Valeur = code alpha2 du pays option.setAttribute('value', data[i].getAttribute('alpha2')); // Contenu de l'élément <option> = Nom du pays (anglais) option.appendChild(document.createTextNode(data[i].firstChild.nodeValue)); // Ajout du noeud à l'élément <select> pays YAHOO.util.Dom.get('pays').appendChild(option); } } /* * Fallback sur méthode d'échec si aucun réponse XML */ else { this.handleFailure(o); } }, /* * Exécution de la requête AJAX via requête HTTP GET */ startRequest:function() { var continent = YAHOO.util.Dom.get('continent').value; YAHOO.util.Connect.asyncRequest('GET', 'pays.php?continent='+continent, callback, null); } }; /* * Définition des méthodes de succès et d'échec */ var callback = { success:AjaxObject.handleSuccess, failure:AjaxObject.handleFailure, scope: AjaxObject };
Attachons la méthode startRequest à l’évènement onChange de la première liste déroulante:
YAHOO.util.Event.addListener('continent', 'change', function(e) { AjaxObject.startRequest(); } );
Les 2 listes déroulantes sont maintenant liées. La liste des pays sera récupérée via AJAX lorsque l’évènement onChange sera déclenchée sur la première liste déroulante. Les pays seront insérés dans la seconde via une manipulation du DOM.
Conclusion
Vous pouvez télécharger une archive contenant tous les fichiers nécessaires au bon fonctionnement de l’exemple:
Pour plus d’informations:
- The Yahoo! User Interface Library (YUI)
- Documentation YUI: Connection, DOM, Event
- Documentation PHP: Extension DOM
- YUI: Sources sur sourceforge.net
- YUI: Service d’hébergement des librairies