RequestManager

Gestionnaire de requêtes

Source

/**
 * 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 ====================*/
	/*========================================================================*/
};