Request

Cette class me permet d'envoyer des requêtes et de récupérer les réponses.

Source

/**
 * Faire des requêtes
 * @author			neolao <neo@neolao.com>
 * @version			0.4 (20/01/2006)
 * @link			http://resources.neolao.com/javascript/request
 * @license			http://creativecommons.org/licenses/by-sa/2.5/
 */
function Request(){
	this.__constructor.apply(this, arguments);
}
Request.prototype = {
	// ----------------------------- CONSTANTES --------------------------------
	XMLHTTP_UNINITIALIZED : 0,  // Etat du xmlHttp, open() n'a pas encore été appelé
	XMLHTTP_LOADING       : 1,  // Etat du xmlHttp, send() n'a pas encore été appelé
	XMLHTTP_LOADED        : 2,  // Etat du xmlHttp, send() a été appelé, les en-têtes et le status sont disponibles
	XMLHTTP_INTERACTIVE   : 3,  // Etat du xmlHttp, pendant le chargement
	XMLHTTP_COMPLETED     : 4,  // Etat du xmlHttp, toutes les opérations sont terminées
 
	HTTP_OK               : 200, // Etat http, la page existe
	HTTP_FILENOTFOUND     : 404, // Etat http, la page n'existe pas
 
	// ----------------------------- VARIABLES ---------------------------------
	/**
	 * La ressource xmlHttp
	 * @var Object
	 */
	_rsc : false,
 
	// ----------------------------- EVENEMENTS --------------------------------
	/**
	 * Evénement invoqué lorsque l'url a été chargée
	 * @param string pResponse La ressource xmlHttp
	 */
	onLoad : function(pResponse){},
	/**
	 * Evénement invoqué pendant le chargement
	 * @param Object pResponse La ressource xmlHttp
	 */
	onLoading : function(pResponse){},
	/**
	 * Evénement invoqué lorsqu'il y a une erreur
	 * @param Object pResponse La ressource xmlHttp
	 */
	onError : function(pResponse){},
 
	/*============================= 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
	 * @return function La fonction qui fait la délégation
	 */
	_delegate : function(pTarget, pFunction){
		var f = function(){
			arguments.callee.func.apply(arguments.callee.target, arguments);
		};
		f.target = pTarget;
		f.func = pFunction;
		return f;
	},
	/**
	 * Initialisation de la ressource xmlHttp
	 * @return xmlHttp La ressource xmlHttp
	 */
	_initRsc : function(){
		this._rsc = false;
 
		// Tentative de création d'une ressource xmlHttp
		if(window.XMLHttpRequest){
			this._rsc = new XMLHttpRequest();		
		}else if(window.ActiveXObject){
			this._rsc = new ActiveXObject("Microsoft.XMLHTTP");
		}
		if(this._rsc != false){
			this._rsc.onreadystatechange = this._delegate(this, this._rscOnChange);
		}
		return this._rsc;
	},
	/**
	 * Lorsque la ressource xmlHttp change d'état
	 */
	_rscOnChange : function(){
		switch(this._rsc.readyState) {
			case this.XMLHTTP_INTERACTIVE:
				this.onLoading(this._rsc);
				break;
			case this.XMLHTTP_COMPLETED:
				if (this._rsc.status == this.HTTP_OK) {
					this.onLoad(this._rsc);
				}
				break;
			default:
				if(this._rsc.status >= 400){
					// Il y a une erreur
					this.onError(this._rsc);
				}else{
					// rien
				}
		}
	},
	/*===================== 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
	 */
	load : function(pUrl, pMethod, pData){		
		if(this._initRsc() != false){
			pMethod = (pMethod.toUpperCase() == "GET")?"GET":"POST";
 
			this._rsc.open(pMethod, pUrl, true);
			if(pMethod == "POST"){
				this._rsc.setRequestHeader("Method", "POST " + pUrl + " HTTP/1.01");
				this._rsc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			}
			this._rsc.send(pData);
		}
	},
	/**
	 * Annule le chargement
	 */
	abort : function(){
		this._rsc.abort();
	}
	/*==================== FIN = METHODES PUBLIQUES = FIN ====================*/
	/*========================================================================*/
};