/************************************************
HTTPREQUEST
-----------------------------------------------
Envia y recibe datos de manera asincrónica.
-----------------------------------------------
+ loadAsync(url:String, f:Function, method:String)
+ addVar(value:Var)
+ getResponse():(String|XmlString|Json)
+ getState():Int
+ getStatus():Int
+ getMethod():String
+ getResponseType():Int
+ setMethod(value:String)
+ setResponseType(value:Int)
- initialize()
- create():AjaxObject
- createQueryString()
-----------------------------------------------
************************************************/
function HttpRequest()
{
var request;
var response;
var method;
var responseType;
var vars;
var varsLength;
var instance;
var RESPONSE_TYPE_TEXT = 1;
var RESPONSE_TYPE_XML = 2;
var RESPONSE_TYPE_JSON = 3;
var READY_STATE_UNINITIALIZED = 0;
var READY_STATE_LOADING = 1;
var READY_STATE_LOADED = 2;
var READY_STATE_BEFORECOMPLETE = 3;
var READY_STATE_COMPLETE = 4;
instance = this;
initialize();
// Inicializa por defecto el objeto HttpRequest
function initialize()
{
request = create();
method = 'GET';
responseType = RESPONSE_TYPE_TEXT;
vars = new Array();
varsLength = 0;
}
// Crea el objeto Ajax
function create()
{
if ( window.XMLHttpRequest )
return new XMLHttpRequest;
else if ( window.ActiveXObject )
return new ActiveXObject('Microsoft.XMLHTTP');
else
return null;
}
// Crea la cadena variable=valor que se envia junto con la petición al servidor
function createQueryString()
{
if ( vars.length == 0 || method.toLowerCase() == 'get' )
return null;
var i;
var end;
var querystring;
end = vars.length;
querystring = vars[0];
for ( i=1 ; i<end ; i++ )
querystring += '&' + vars[i];
return querystring;
}
// Se ejecuta cuando la petición está en el estado 2
this.onload = function(){return false;}
// Se ejecuta cuando la petición está en el estado 3
this.onbeforecomplete = function(){return false;}
// Se ejecuta cuando la petición ha finalizado en su totalidad
this.oncomplete = function(){return false;}
// loadAsync: Carga una url de manera asincrónica
// Args -> url: página que se va a cargar
// f: función que se va a ejecutar cuando la petición finalice
// m: método por el que se envian las variables (GET|POST)
this.loadAsync = function(url,f,m)
{
var handler;
var instance;
handler = arguments[1] || this.oncomplete;
method = arguments[2] || method;
instance = this;
request.onreadystatechange = function()
{
switch ( request.readyState )
{
case 2:
instance.onload.call();
break;
case 3:
instance.onbeforecomplete.call();
break;
case 4:
handler.call();
break;
default:
break;
}
}
request.open(method,url,true);
if ( method.toLowerCase() == 'post' )
{
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.setRequestHeader("Content-length", varsLength);
}
request.send(createQueryString());
}
this.sendForm = function(formId){
var form = document.getElementById(formId);
var elementsCount = form.elements.length;
var element;
for ( i=0 ; i<elementsCount ; i++ )
{
element = form.elements[i];
switch(element.type.toLowerCase())
{
case 'text':
case 'textarea':
case 'checkbox':
case 'radiobutton':
case 'hidden':
case 'password':
instance.addVar(element.name+'='+element.value);
break;
case 'select-one':
instance.addVar(element.name+'='+element.options[element.selectedIndex].value);
break;
default:
break;
}
}
instance.loadAsync(form.action);
}
// addVar: Agrega una cadena de tipo variable=valor para enviar al servidor
// Args -> value: cadena de tipo variable=valor que se agrega
this.addVar = function(value)
{
vars[vars.length] = value;
varsLength += value.length;
}
// getResponse: Devuelve la respuesta del servidor
this.getResponse = function()
{
switch ( responseType )
{
case 1:
return request.responseText;
break;
case 2:
return request.responseXML;
break;
case 3:
return eval('('+request.responseText+')');
break;
default:
break;
}
}
// getState: Devuelve el estado en el que se encuentra la petición actual
this.getState = function()
{
return request.readyState;
}
// getStatus: Devuelve el estado en el que terminó la petición actual
this.getStatus = function()
{
return request.status;
}
// getMethod: Devuelve el método utilizado en la petición actual
this.getMethod = function()
{
return method;
}
// setMethod: Establece el método en el que se enviarán las variables al servidor
this.setMethod = function(value)
{
method = value;
}
// getResponseType: Devuelve el tipo de respuesta que tendrá el servidor en la petición actual
this.getResponseType = function()
{
return responseType;
}
// setResponseType: Establece el tipo de respuesta que queremos obtener del servidor con la petición actual
this.setResponseType = function(value)
{
responseType = value;
}
}