Ajax (parte 2): encarando o mundo real

Obtendo HTML

Al�m da fila de requisi��es, h� algo mais que podemos fazer para otimizar nosso trabalho e que pode ser reaproveitado em v�rios projetos, que � escrever um m�todo gen�rico para obter HTML do servidor (algo muito comum trabalhando com Ajax.)

Naturalmente voc� pode fazer mais do que isso com Ajax, ent�o h� espa�o aberto para criar, por exemplo, uma fun��o para executar javascript vindo do servidor e outra que preencha um select (e n�o consigo pensar em mais nada...)

Nossa id�ia � ter uma fun��o ajaxHTML, que recebe dois atributos: o id de um elemento HTML e assim:

function ajaxHTML(id,url){

    //Obt�m o objeto HTML
    objetoHTML=document.getElementById(id)

    //Exibe "Carregando..."
    objetoHTML.innerHTML="<span class='carregando'>"+
                         "Carregando...</span>"

    //Abre a conex�o
    xmlhttp.open("GET",url);

    //Fun��o para tratamento do retorno
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4){
            //Mostra o HTML recebido
            retorno=unescape(xmlhttp.responseText.replace(/\+/g," "))
            objetoHTML.innerHTML=retorno
        }
    }

    //Executa
    xmlhttp.send(null)
}

Assim voc� pode chamar ajaxHTML("conteudo","funcoes.php?n=1") e a fun��o vai se encarregar de exibir "Carregando..." no div "conteudo", fazer a requisi��o e atualizar o conte�do do div quando receber o c�digo. Isto segue aquela premissa do primeiro artigo de que usando a mesma fun��o no servidor para o Ajax e para a aplica��o sem javascript � muito mais f�cil fazer sua aplica��o degradar bonito (ou seja, funcionar bem sem javascript.)

Voc� vai notar que no funcoes.php, al�m da nova fun��o de t�tulo, escrevemos apenas o trecho:

if(isset($_GET["h"])){
    $t=titulo(intval($_GET["h"]));
    echo(urlencode($t));
}

Ou seja, se passarmos o par�metro h vamos ter como retorno o t�tulo da p�gina. Voc� vai se lembrar que j� hav�amos constru�do o c�digo, no primeiro artigo, para que ao receber o par�metro n obtenhamos o conte�do da p�gina. Agora s� falta a fila de conex�es.

Elcio Ferreira * Tableless.com.br