HTTP Request //Repositório JavaScript

Descrição

Classe para fazer requisições remotas, a qual pode ser usada no popular "AJAX".
Criado: 2006.08.18

Código (Download)

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/classes/http-request [rev. #1]

HTTPRequest = function(){};
with({$: HTTPRequest.prototype}){
    $.isSupported = function(){
        return !!this.getConnection();
    };
    $.events = ["start", "open", "send", "load", "end"];
    $.filter = encodeURIComponent;
    $.getConnection = function(){
        var i, o = [function(){return new ActiveXObject("Msxml2.XMLHTTP");},
        function(){return new ActiveXObject("Microsoft.XMLHTTP");},
        function(){return new XMLHttpRequest;}];
        for(i = o.length; i--;) try{return o[i]();} catch(e){}
        return null;
    };
    $.formatParams = function(params){
        var i, r = [];
        for(i in params) r[r.length] = i + "=" + (this.filter ? this.filter(params[i]) : params[i]);
        return r.join("&");
    };
    $.get = function(url, params, handler, waitResponse){
        return this.request("GET", url + (url.indexOf("?") + 1 ? "&" : "?") + this.formatParams(params), null, handler, null, waitResponse);
    };
    $.post = function(url, params, handler, waitResponse){
        return this.request("POST", url, params = this.formatParams(params), handler, {
            "Connection": "close",
            "Content-Length": params.length,
            "Method": "POST " + url + " HTTP/1.1",
            "Content-Type": "application/x-www-form-urlencoded; charset=utf-8"
        }, waitResponse);
    };
    $.request = function(method, url, params, handler, headers, waitResponse){
        var i, self = this, o = self.getConnection(), f = handler instanceof Function;
        try{
            o.open(method, url, !waitResponse);
            waitResponse || (o.onreadystatechange = function(){
                var s = $.events[o.readyState];
                handler && (f ? handler(o) : s in handler && handler[s].call(self, o));
            });
            if(headers){
                for(i in {USER_AGENT: 0, XUSER_AGENT: 0})
                    i in headers || (headers[i] = "XMLHttpRequest");
                for(i in headers)
                    o.setRequestHeader(i, headers[i]);
            }
            o.send(params);
            waitResponse && handler && (f ? handler(o) : handler["end"] && handler["end"].call(self, o));
            return true;
        }
        catch(e){
            return false;
        }
    };
}

Exemplo (Exemplo)

<fieldset>
    <legend>HTTPRequest example</legend>
    <input type="button" value="POST request with generic listener and params passage" onclick="genericHandler()" />
    <br /><input type="button" value="GET request with specific listener (binded on load and end)" onclick="specificHandler()" />

<script type="text/javascript">
//<![CDATA[

var r = new HTTPRequest;

function myHandler(o){
    alert("Current event = " + r.events[o.readyState] +
    '\nAvailable "responseText.length" = ' + o.responseText.length);
}
function genericHandler(){
    r.post(location.href, {param: "abcde", name: "Jonas", site: "http://jsfromhell.com"}, myHandler);
}
function specificHandler(){
    r.get(location.href, null, {load: myHandler, end: myHandler});
}
document.write(
    "<br />Supports XMLHTTPRequest = ".bold() + r.isSupported(),
    '<br />Encoded with the default filter ("encodeURIComponent") = '.bold() + r.formatParams({nameA: "aeiou", nameB: "????"})
);

r.filter = escape;
document.write('<br />Encoded with "escape" filter = '.bold() + r.formatParams({nameA: "aeiou", nameB: "????"}));

r.filter = null;
document.write("<br />Encoded with no filtering = ".bold() + r.formatParams({nameA: "aeiou", nameB: "????"}));

//]]>
</script>
</fieldset>

Ajuda

Construtor

HTTPRequest(void)
Gera uma instância de HTTPRequest. Nas requisições a classe se identifica no header HTTP_USER_AGENT como "XMLHTTPRequest"

Propriedades

HTTPRequest.filter: Function(data: String): String
função que será usada para filtrar os valores dos parâmetros, por default é usada a função "encodeURIComponent"

Métodos

Observação: Há duas formas de setar os callbacks, se for passado apenas uma função, ela será chamada em todos os eventos do XMLHTTPRequest, a outra forma é atribuir o callback apenas aos eventos desejados, usando a seguinte sintaxe: {nomeDoEvento: callback, nomeDoEvento2: callback, ...}, onde os eventos possíveis são:

  • open = chamado após a inínio da requisição
  • sent = chamado assim que os dados da requisição foram enviados
  • load = chamaddo múltiplas vezes enquanto o conteúdo é retornado
  • end = chamado ao final da transferência

HTTPRequest.isSupported(void): Boolean
Retorna true caso o browser suporte a criação do objeto XMLHTTPRequest.
HTTPRequest.get(url: String, [params: Object = null], [handler: Function(xhr: XMLHTTPRequest): void = null], [waitResponse: Boolean = false]): Boolean
Faz um requisição via GET e retorna true em caso de sucesso na criação da requisição.
url
url da requisição
params
hashmap dos parâmetros, será serializado e adicionado ao final da url como query string
handler
callback que será chamado durante os eventos do XMLHTTPRequest, recebe como argumento o próprio objeto XMLHTTPRequest
waitResponse
indica se a requisição será síncrona (true) ou assíncrona (false)
HTTPRequest.post(url: String, [params: Object = null], [handler: Function(xhr: XMLHTTPRequest): void = null], [waitResponse: Boolean = false]): Boolean
Faz um requisição via POST e retorna true em caso de sucesso na criação da requisição.
url
url da requisição
params
hashmap dos parâmetros, será serializado e enviado junto com o POST
handler
callback que será chamado durante os eventos do XMLHTTPRequest, recebe como argumento o próprio objeto XMLHTTPRequest
waitResponse
indica se a requisição será síncrona (true) ou assíncrona (false)
HTTPRequest.request(method: String, url: String, [params: Object = null], [handler: Function(xhr: XMLHTTPRequest): void = null], [headers: Object = null] [waitResponse: Boolean = false]): Boolean
Faz um requisição e retorna true em caso de sucesso na criação.
method
método que será usado para efetuar a requisição
url
url da requisição
params
hashmap dos parâmetros, será serializado e enviado junto com a requisição
handler
callback que será chamado durante os eventos do XMLHTTPRequest, recebe como argumento o próprio objeto XMLHTTPRequest
headers
hashmap contendo headers adicionais
waitResponse
indica se a requisição será síncrona (true) ou assíncrona (false)
HTTPRequest.getConnection(void): XMLHTTPRequest
Retorna um novo objeto XMLHTTPRequest ou null em caso de falha.
HTTPRequest.formatParams(params: Object): String
Serializa o objeto para o formato de "query string".
params
objeto cujas propriedades serão serializadas

Ranque (Votos: 50)

3.88