Gestionnaire de requêtes
/** * Gestionnaire de requêtes * * On peut lancer plusieurs requêtes en même temps * @author neolao <neo@neolao.com> * @version 0.1 (20/01/2006) * @link http://resources.neolao.com/javascript/request * @license http://creativecommons.org/licenses/by-sa/2.5/ */ function RequestManager(){ this.__constructor.apply(this, arguments); } RequestManager.prototype = { // ----------------------------- VARIABLES --------------------------------- /** * La liste des écouteurs * @var Array */ _listeners : new Array(), /*============================= CONSTRUCTEUR =============================*/ /*========================================================================*/ /** * Initialisation de la class */ __constructor : function(){ }, /*======================= FIN = CONSTRUCTEUR = FIN =======================*/ /*========================================================================*/ /*=========================== METHODES PRIVEES ===========================*/ /*========================================================================*/ /** * Délégation de fonction * @param object pTarget La cible de la fonction * @param function pFunction La fonction * @param mixed pParam1 Un paramètre supplémentaire (sans limite) * @return function La fonction qui fait la délégation */ _delegate : function(pTarget, pFunction, pParam1){ var f = function(){ var a = new Array(); for(var j=0; j<arguments.length; j++){ a.push(arguments[j]); } return arguments.callee.func.apply(arguments.callee.target, a.concat(arguments.callee.bonus)); }; var args = new Array(); for(var i=0; i<arguments.length; i++){ args.push(arguments[i]); } f.target = args.shift(); f.func = args.shift(); f.bonus = args; return f; }, /** * Invoqué lorsque le chargement commence */ _onRequestStartLoad : function(pItem){ for(var i=0; i<this._listeners.length; i++){ this._listeners[i].onStartLoad(pItem); } }, /** * Invoqué lorsque le chargement est terminé pour une requête * @param Object pReponse La ressource xmlHttp * @param Object pItem L'item de la requête */ _onRequestLoad : function(pReponse, pItem){ for(var i=0; i<this._listeners.length; i++){ pItem.response = pReponse; this._listeners[i].onLoad(pItem); } }, /** * Invoqué lorsqu'il y a une erreur pour une requête * @param Object pReponse La ressource xmlHttp * @param Object pItem L'item de la requête */ _onRequestError : function(pReponse, pItem){ for(var i=0; i<this._listeners.length; i++){ pItem.response = pReponse; pItem.errorType = pReponse.readyState; this._listeners[i].onError(pItem); } }, /*===================== FIN = METHODES PRIVEES = FIN =====================*/ /*========================================================================*/ /*========================== METHODES PUBLIQUES ==========================*/ /*========================================================================*/ /** * Chargement d'une url * @param String pUrl L'url à charger * @param String pMethod La méthode utilisée: GET ou POST * @param String pData Les données envoyées * @param String pMsgLoading Le message de chargement * @return Request L'instance de Request qui fait la requête */ load : function(pUrl, pMethod, pData, pMsgLoading){ var vRequest = new Request(); var vItem = new Object(); vItem.id = vRequest; vItem.message = pMsgLoading; vRequest.onLoad = this._delegate(this, this._onRequestLoad, vItem); vRequest.onError = this._delegate(this, this._onRequestError, vItem); this._onRequestStartLoad(vItem); vRequest.load(pUrl, pMethod, pData); return vRequest; }, /** * Ajoute un écouteur * * L'écouteur doit implémenter les méthodes onStartLoad(pItem), onLoad(pItem) et onError(pItem) * où pItem est le détails du chargement créé par Request. * Les propriétés de pItem sont : * - id : L'instance de Request * - message : Le message de chargement * - response : La ressource xmlHttp * - errorType : Le type de l'erreur pour on Error * @param Object pObject L'écouteur */ addListener : function(pObject){ this._listeners.push(pObject); } /*==================== FIN = METHODES PUBLIQUES = FIN ====================*/ /*========================================================================*/ };