61 lines
2.5 KiB
JavaScript
61 lines
2.5 KiB
JavaScript
/***************************************/
|
|
/* */
|
|
/* 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<string> le lien à charger
|
|
- pHandler<function> 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<string> type de méthode, vaut 'POST' ou 'GET' et vaut 'POST' par défaut ou s'il n'est pas renseigné
|
|
- pForm<FormData> 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;
|
|
}
|
|
|
|
|
|
};
|
|
|
|
var AJAX = new AjaxManager();
|