/***************************************/ /* */ /* GESTIONNAIRE D'OPTIMISATION DES */ /* RESSOURCES ET DE */ /* NAVIGATION EN AJAX */ /* */ /* Développé par {xdrm} */ /* */ /* GITHUB github.com/xdrm-brackets/ */ /* */ /***************************************/ var AjaxManager = function(){}; AjaxManager.prototype = { xhr: [], // tableau d'objets pour les requêtes ajax /* ======================================================================= Cette fonction effectue une requête Ajax (compatible à partir de IE5) PARAMETRES: - pLink le lien à charger - pHandler une fonction qui s'éxécutera avec la réponse de la requête passée en paramètre (voir exemples dessous pour pHandler) - pMethod type de méthode, vaut 'POST' ou 'GET' et vaut 'POST' par défaut ou s'il n'est pas renseigné - pForm formulaire de type FormData() contenant les données à envoyer (uniquement en POST), si pForm vaut GET les données doivent être passées dans l'URL ========================================================================== */ send: function(pLink, pHandler, pMethod, pForm){ // on efface les requêtes qui sont terminées et on push une nouvelle for( var i = 0 ; i < this.xhr.length ; i++ ){ // if( this.xhr[i].readyState == 4 ) // si terminée this.xhr = this.xhr.slice(0,i-1).concat(this.xhr.slice(i,this.xhr.length-1)); // suppression entrée } var index = this.xhr.push( (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHttpRequest') ) -1; this.xhr[index].onreadystatechange = (function(){ if( this.xhr[index].readyState == 4 ){ // si la requête est terminée if( [0,200].indexOf(this.xhr[index].status) > -1 ) // si fichier existe et reçu pHandler(this.xhr[index].responseText); else // si code d'erreur retourne null pHandler(); } }).bind(this); // gestion de la méthode var method = ( typeof pMethod == 'string' && /^POST|GET$/i.test(pMethod) ) ? pMethod.toUpperCase() : 'POST'; // gestion du formulaire si la méthode est POST var form = ( method == 'POST' && typeof pForm == 'object' && pForm instanceof FormData ) ? pForm : null; this.xhr[index].open( method, pLink, true ); this.xhr[index].send( form ); return this; } };