Esse post, é complemento do Como debugar JavaScript com o Firefox?.

A maioria das dúvidas que vejo sobre AJAX, na verdade são sobre Javascript. Então se você se deparar com qualquer erro no console, vá para o outro post, e depois volte.

Vou usar o Firebug, para rastrear nossas requisições AJAX, e então explicar como pode ser simples o desenvolvimento dessa metodologia.

Não gosto nenhum pouco de copiar definições, então quando eu precisar fazer algo do tipo, apenas jogo o link no meio do texto, e espero que você que estiver lendo, clique, leia oque eu quis lhe mostrar, e volte. Ou não, o legal é a opção. Se você não quiser clicar, apenas continue lendo, e eu não te encho de ‘Mais do Mesmo‘.

Comecemos do simples. O meu foco será ajax, por isso farei tudo com javascript puro, sem plugins, libs ou frameworks. Se você entender o conceito por trás, vendo por de baixo dos panos como estou mostrando, então estará apto a aplicar o mesmo com qualquer falicitador.

index.html

<html>
<head>
  <title>teste</title>
<script type="text/javascript">
function id( el ){
  return document.getElementById( el );
}
function getHTTPObject(){
  if(window.XMLHttpRequest){
    return new XMLHttpRequest();
  }else if(window.ActiveXObject){
    var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
    for(var i = 0; i < prefixes.length; i++){
      try {
        return new ActiveXObject(prefixes[i] + ".XMLHTTP");
      } catch (e) {}
    }
  }
}
var xmlHttp = getHTTPObject();
function envia( file ){
  xmlHttp.open( "GET", file, true );
  xmlHttp.onreadystatechange = function(){
    if (xmlHttp.readyState == 4){
      id('response').innerHTML = xmlHttp.responseText;
    }
  }
  xmlHttp.send( null );
}
window.onload = function(){
  id('enviar').onclick = function(){
    envia( 'process.php' );
  }
}
</script>
</head>
<body>
  <input type="button" name="enviar" id="enviar" value="Enviar xhr" />

  <p id="response"></p>
</body>
</html>

processa.php

<?php
  echo 'Beleza, chegou até aqui!';

De proprósito, ‘errei’, o nome do arquivo, coloquei process.php, mas na verdade se chama processa.php [terminando com a letra A].

envia( 'process.php' );

Abro o projeto no servidor, clico no botão, e:

Não funcionou, não fez o que queríamos

Erro na tela. Bem simples, e fácil de entender.

Não encontrou o arquivo. Dentre os possíveis motivos, eu poderia ter errado o caminho, o nome do arquivo, não ter me atentado ao CaSe SEnSiTIVe, o arquivo realmente ainda não ter sido criado…

Só apareceu dessa forma, porque eu pedi:

id('response').innerHTML = xmlHttp.responseText;

Mas nem sempre, é tão simples. Se eu não tivesse colocado o retorno completo dentro dessa DIV, teria sido muito mais silencioso. Só nos resta debugar o código.

Acessar diretamente

Uma forma, é acessar diretamente o arquivo que tentamos chamar. Indo no browser, e jogando a URL lá, crua..

http://localhost/process.php

Bem intuitivo. Esse princípio, demonstra bem que a única mágica do ajax, é ‘ir e voltar’ sem refresh. Todo o resto já estamos muito acostumados a lidar.

Mas não é tão prático assim, e ficar acessando várias URLs, pode nos deixar confusos, pois temos que levar em conta o caminho apartir do nosso script.

Usar alert()s

Nessas horas o alert(), é o ‘canino fiel’(melhor amigo), dos programadores js.

if (xmlHttp.readyState == 4){
      alert( xmlHttp.responseText );
      //id('response').innerHTML = xmlHttp.responseText;
    }

No alert, vemos:

O mesmo, porém tivemos que ‘caçar’ mais, e nem sempre é tão simples assim, podemos nos perder, e gastamos preciosos minutos colocando alert()s em tudo quanto é canto.

Finalmente, com o Firebug

Nesse momento, é o Firebug que vai nos salvar.

Apertemos F12, aba Rede, depois xhr:

Basta dispararmos novamente nossa requisição, clicando no nosso input, e vemos o erro no Firebug:

Só por esta aba, já temos toda a informação que precisamos, porém as outras, resposta e html, nos dão uma idéia mais detalhada e visual respectivamente do que obtivemos.

Corrigimos o nome do arquivo

envia( 'processa.php' );

No próximo post, vou mostrar mais algumas situações, e a ajuda que o Firebug nos dá.

Comentem. Me digam o que estão achando, me servirá de guia, para saber sobre o que devo escrever.

Até lá! =)