Skip to content


Engatinhando com AJAX e PHP. Parte 2

Nesse tutorial vamos fazer nosso primeiro exemplo de AJAX + PHP.
Vamos usar primeiramente o XMLHttp GET Request.

Quem não viu ainda, a parte 1 do tutorial você encontra aqui mesmo.

[update 03/10/07]
Parte 1 do tutorial AJAX + PHP
Parte 3 do tutorial AJAX + PHP
[/update]

Bora lá!!

Criando o Objeto XMLHttp

Vamos mexer um pouco no JavaScript para criar a requisição.

function criaXMLHttp() {
 if (typeof XMLHttpRequest != "undefined")
 	return new XMLHttpRequest();
 else if (window.ActiveXObject){
 	var versoes = ["MSXML2.XMLHttp.5.0",
 	"MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0",
 	"MSXML2.XMLHttp", "Microsoft.XMLHttp"
 	];
 }
 for (var i = 0; i < versoes.length; i++){
 	try{
 		return new ActiveXObject(versoes[i]);
 	}catch (e) {}
 }
 throw new Error("Seu browser nao suporta AJAX");
}

Primeiro ela testa se o browser suporta o XMLHttpRequest e cria se o suportar.. se não ele cria um array com várias versões do XMLHttp para browsers mais antigos(IE). E fica em um loop até conseguir criar um objeto, se não criar nenhum ele retorna a mensagem de erro.
Resumindo: a função testa as possibilidades do browser de criar o objeto XMLHttp. Se for o IE 6.0 ele cria o MSXML2.XMLHttp.5.0 e assim por diante.

Usando o XMLHttp

O objeto XMLHttp tem um método que a mais imporante, a open(). Ela tem 3 parâmetros que precisamos saber:

  • Tipo da requisição: sintrg que indique o tipo: get ou post
  • URL: string com a url que você quer fazer a requisição
  • Async: boolean que indica se o modo da requisição seja feito assincronamente(não sei escrever essa palavra :( )

O ultimo parâmetro é o mais importante.. ele que vai dizer se a sua requisição é AJAX mesmo ou não. Se ele for true, a requisição é feita em tempo real. Já se você colocar false, a requisição é feita e o resto da página só é loadada quando a requisição retornar algo ou terminar.
Exemplo:

var XMLHttp = criaXMLHttp();
XMLHttp.open("get", "info.txt", true);

Outro evento importante no XMLHttp é o onreadystatechange. O XMLHttp tem uma propriedade chamada readyState que muda conforme a requisição é recebida. Existem 5 estados para o readyState:

  • 0(Não Iniciado): O Objeto foi criado mas o método open() não foi chamado ainda.
  • 1(Carregando): O método open() foi chamado mas a requisição não foi enviada ainda.
  • 2(Carregado): A requisição foi enviada.
  • 3(Incompleto): Uma parte da resposta do servidor foi recebida.
  • 4(Completo): Todos as informações foram recebidas e a conexão foi fechada com sucesso.

Toda vez que a propriedade do readyState for mudada, o evento onreadystatechange é disparado. Por causa das diferentes implementações dos browsers, a propriedade do readyState não funciona corretamente em todos os browsers. O unico modo para cross-browser é usando o valor 0, 1 e 4 para o readyState. Mas na maioria dos casos você usará apenas o estado 4 mesmo.
Depois de tudo isso temos que realmente enviar a requisição com o método send(). Quando utilizamos a requisição por GET nós não precisamos passar nenhum parâmetro no send(). Depois quando vermos com POST aí iremos usar mais profundamente. :)
Exemplo:

var XMLHttp = criaXMLHttp();
XMLHttp.open("get", "info.txt", true);
XMLHttp.onreadystatechange = function () {
 if (XMLHttp.readyState == 4)
 	alert("EEE primeiro teste com AJAX!! :)");
};
XMLHttp.send();

Tá bom, mas e agora? Enviei tudo, recebi e pronto. Cadê minha informação?
Ta certo, agora é bem simples, existe uma propriedade no XMLHttp que ele tem o retorno do http request, o responseText(no nosso caso, poderia ser responseXML). Lembram da primeira parte do tutorial? Então, agora vamos usar ela.
Primeiro vamos testar se a informação retornada veio com sucesso (200). Para testarmos o status do retorno existe a propriedade status do XMLHttp. Tudo muito simples não? Então olha o exemplo:

if (XMLHttp.status == 200)
	alert("O retorno foi: " + XMLHttp.responseText);
else
	alert("O retorno foi: " + XMLHttp.statusText);

Beleza. Até aí vimos exemplo bem bobos, apenas para intendermos como funciona as coisas.
Agora sim vamos ver como fica uma aplicação com AJAX e PHP.

Já temos a função que retorna o Objeto XMLHttp, então vamos fazer a partir dela.
Agora vamos para o código HTML.
Criamos duas divs. Uma vai exibir o resultado e outra vai ser o campo onde você coloca o id para fazer a pesquisa.

<div id="resultado"></div>
 
<div id="lerid">
Id: <input name="id" id="id" type="text" />
<input value="OKA!!" onclick="lerId()" type="button" />
</div>

Agora, na função lerId() temos que pegar o valor do campo id e enviar ele na requisição usando GET e depois disso, recebemos o valor e exibimos na div resultado.
Fica assim:

function lerId() {
	var id = document.getElementById("id").value;
	var divInfo = document.getElementById("resultado");
	var XMLHttp = criaXMLHttp();
	XMLHttp.open("get", "lerId.php?id=" + id, true);
	XMLHttp.onreadystatechange = function () {
		if (XMLHttp.readyState == 4)
			if (XMLHttp.status == 200){
				divInfo.innerHTML = XMLHttp.responseText;
			} else {
				divInfo.innerHTML = "Um erro ocorreu" + XMLHttp.statusText;
			}
	};
	XMLHttp.send(null);
}

Como já vimos como funciona a requisição XMLHttp não vamos ter muita dificuldade de entender essa. A unica diferença com o exemplo é que nós passamos um parâmetro para a página pegaId.php e exibir o resultado no div resultado.

Agora vamos criar a página pegaId.php que irá ler o id enviado pela requisição Http e retornar o status.
lerId.php:

<?php
// mudamos o tipo de arquivo.. ao invez de php irá retornar um texto normal
header("Content-Type: text/plain");
// recebe o id que veio pelo parametro usando o método GET
$id = $_GET["id"];
$resultado = "";
// isso agora é um exemplo, você tem que aplicar a conexão e a consulta sql à sua necessidade
$BDUsuario = "seu usuario ou root";
$BDSenha = "senha do usuario";
$BDServidor = "localhost normalmente ou o servidor de banco de dados";
$BancoDeDados = "nome do seu banco de dados";
mysql_connect($BDServidor, $BDUsuario, $BDSenha);
mysql_select_db($BancoDeDados);
$sql = mysql_query("SELECT * FROM tabela WHERE id = " . $id);
if ($resultado = $mysql_fetch_array($sql))
	$resultado = "ID Encontrado
	\n
	Nome: " . $resultado['nome'];
echo $resultado;
?>

Agora o seu primeiro programa com AJAX está escrito.. bem simples não?
Ele só recebe o id que veio por GET, procura no banco de dados, e exibe o nome da pessoa referente ao id(exemplo apenas)..
A unica coisa que pode ficar meio no ar é a questão do header e do echo no final. O header serve para fazer com que o retorno do arquivo fique em formato texto e não em outro tipo(como html, php). Pois nós usamos o XMLHttp.responseText. Se você colocar alguma tag html, na pagina principal, onde o script é rodado, irá funcionar o html, pois a página é html. Agora se você rodar o lerId.php ele irá exibir como se fosse um texto normal.
O echo serve apenas para exibir o resultado. Todo o resultado que você quer que seja exibido no cliente você tem que exibir em seu script php, pois o XMLHttp.responseText pega justamente o que a página php(server-side) exibe, no caso um texto.

Terminamos por hoje nossa aula de AJAX com PHP parte 2.

Na proxima aula vamos ver como funciona a requisição pelo método POST.

Dúvidas podem comentar.

Abraços

Posted in AJAX, PHP, Tutoriais, XHTML.

Tagged with , .


37 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Walter Cruz says

    Oi. sem querer ser chato, mas tem um monte de requesição onde deveria ser requisição.

    De resto, o tutorial é massa. Achei interessante a verificação de versões do xhmlhttp no começo.

    []’s

  2. Raphael says

    Olá, muito bom o post.

    Parabens pelo blog, suas postagens são excelentes de de uma didatica muito boa. Precisando estamos ai =)

    Abraços

  3. Luis FIlipe says

    otimo artigo!!! e bem bonito o seu blog!

    o link para o atigo parte 1 ta quebrado.

    Flw abraço

  4. gobbueno says

    Aeee! Destaque da wordpress.com, heim?
    Parabéns carinha. Mandou muito bem.
    Já assinava seus feeds antes, mas aposto que você conseguiu aumentar bastante a taxa de visitantes, não?
    Ah! E gostei do tema do blog. É o novo, né?

    Grande abraço e parabéns pelo artigo.

  5. Felipe Tonello says

    Valeu galera!!! :)

    Luis Filipe o link aqui está funcionando normal..

    gobbueno destaque? onde vc viu isso??
    Sobre as feeds.. elas aumentaram sim.. na feed normal do wordpress… a fo feedburner continua na mesma hehhee mas é isso ae..
    Esse tema é novo sim… :)

    Abraços

  6. Caio says

    Legal o tema novo e bem melhor que o antigo.

  7. Bruno says

    OI, Felipe, mto massa esse tutorial, tipo que to a uns 3 dias querendo aprender ajax, e ja li um tanto de tutorial pela net, mas não consegui colocar nenhum exemplo pra funcionar, hehehe, entendo a logica do negocio, mas so fica dando uns erros ai, to me sentindo um pouco idiota, mas to correndo atraz!! então vai la.
    da pra vc me mandar o fonte desse exemplo ai??
    Deixa eu te perguntar mais uma coisinha, tipo que tenho na minha maquina rodando, apache+php+mysql, inclusive to montando um site, mas quero deixa-lo mais bacana e ajax pode ser a saida, mas voltando a pergunta, preciso de mais alguma coisa pra rodar essas aplicações?
    Um abraço, e novamente, o tutorial ta massa!!!

  8. Victor de Souza Couto says

    ótimo post
    bom tutorial
    eu estou começando e esse foi um bom exemplo pra estudar!!!

    abraços

  9. Túlio Vargas says

    Olá Felipe,
    tudo bem !!
    e ae.. tá show o blog hein!!
    ha tava vendo suas fotinhas no flickr. auhahuuha
    Ae.. depois aparece lá no msn pra gente trocar umas ideias..
    um abraço

    []´s

  10. Espanka says

    Ola, gostaria de saber quando vc vai postar a parte 3 desse tutorial e qual foi e vantagem de exibir o nome do usuario vindo do banco de dados em AJAX e nao fazer isso no php SOZINHO mesmo?

    Muito obrigado!!!

  11. Felipe Tonello says

    Sobre a 3a parte do tutorial, eu ainda não comecei a faze-la. Mas final de semana pretendo começar e jájá postar ela..

    Então, a vantagem dessa aplicação ajax é você fazer consulta em um banco de dados sem precisar atualizar a página.. e já retornar para o usuário rapidamente alí na mesma página..
    é lógico que eu usei um exemplo bem básico, mas a ideia é vocês entenderem como faz e aplicarem às suas necessidades..

  12. Dieme Defante says

    Muito bom esse artigo, acompanhei o primeiro que voce fez e achei bastante interessante e fácil de compreender.
    Valeu.

  13. Dieme Defante says

    acho que em vez de :
    XMLHttp.open(“get”, “pegaId.php?id=” + id, true);

    deveria ser:
    XMLHttp.open(“get”, “lerId.php?id=” + id, true);

    se não, não funciona.

  14. Felipe Tonello says

    hehehe boa observação.. thanks =]

  15. Luxther Defaul says

    Olá Felipe!

    Cara, navegando pela internet localizei o seu blog pelo google e achei super demais!!! Com isso gostaria de ajudar em alguma parte contribuindo com um link aonde as pessoas poderão ver o que se pode fazer com Ajax. [Link]=> http://www.miniajax.com/

    Na verdade um local que aponta para outros sites relacionado ao script selecionado. Muito bom, vale apena conferir.

    Obrigado e sucessos!

    Luxther Defaul.

  16. Felipe Tonello says

    Olá Luxther,

    Muito obrigado pela dica! Sempre que poder contribua! :)

    Abraços,
    Felipe Tonello

  17. Leonardo Frangelli says

    Muito bom o tuto cara, continue assim e nao de bola pra torcida que sempre tenta achar um defeito.

    Perfeito eh disso que nos que estamos comecando no ajax precisamos, exemplos simples que funcionem de forma perfeita.

    Vlw e espero ler mais um bocado aqui.

  18. Adonai Cruz says

    muito bom o seu tutorial, estava procurando por algo do tipo pela net mas o seu foi o melhor

  19. Isaac says

    Olá Felipe,

    Não poderia deixar de agradecer pela grande ajuda em postar um tutorial tão simples, objetivo e muito claro. Apos ler varios materiais somente hoje após ler esse tutorial tive a certeza que esse bicho papão não existe. Um grande abraço e continue assim, ajudando a todos com seu conhecimento….Alias voce ainda vai postar o parte que irá falar do metodo POST?

    valeu

  20. Márcio says

    Olá..gostaria de lhe parabenizar pelo tutorial.

    E também gostaria de deixar uma sugestão:
    no arquivo lerid.php:

    em:

  21. Filipe Ricardo says

    primeiramente queria lhe parabenizar…

    muito bom seu tutorial, eu to começando com ajax, naum sei nada… mais to com vontade de aprender…

    comigo funcionou certinho… ja foi um grande avanço…

    vlw, espero pelos próximos :)

  22. joaquim says

    Olá felipe,

    Cara gostei muito do seu exempolo rodo filé aqui nao tive nem um impace pra colocalo pra rodar. agora queria o lance de envio dos inputs por post vc vai publicar ainda ou nao ira publicar. se existir uma possibilidade de mandar pro meu email pelo menos a unica pare que preciso alterar iria agradecer muito

  23. Johann says

    Parabéns pelo artigo ! Muito bom mesmo. Eu sabia como fazer o lado cliente mas não sabia como era o lado servidor em PHP.

    Só uma dica: coloca o link para o 3o. artigo neste tutorial.

    Abraço!

  24. Blue_Acid.PT says

    Parabens, gostei muito.

    Continuação de bons trabalhos.

  25. Sérgio says

    Muito bom o blog e o artigo. Valeu!!
    Quanto aos erros de português, não se preocupe, nem com os comentários bestas que algumas pessoas fazem.
    É como na história do professor que mostrou um lençol branco com uma pequena mancha preta para seus alunos, e pediu que falassem o que estavam vendo. Todos disseram que viam uma mancha preta. Depois o professor mostrou a todos que só tinham olhos “viciados” para verem as coisas erradas, porque nenhum deles, ao que parece, conseguiu enxergar o lençól, que era o mais importante. Como no seu artigo.
    Mandou bem!!

  26. tommy says

    Criamos duas divs. Uma vai exibir o resultado e outra vai ser o campo onde você coloca o id para fazer a pesquisa.

    Id:

    Onde estão as divs???

  27. tommy says

    Na mensagem anterior o codigo HTML não apareceu, vamos tentar novamente.
    Criamos duas divs. Uma vai exibir o resultado e outra vai ser o campo onde você coloca o id para fazer a pesquisa.
    \ \
    \
    Id:
    \
    \

    Onde estão as divs???

  28. Felipe Tonello says

    Obrigado pelo comentário..
    Realmente estava bugado.. mas arrumei!!

    :)

  29. jimi says

    Felipe, o “for” na função CriaXMLHttp não deveria ficar dentro do else if ?

    pq vc está criando a variável “versoes” dentro do else if, quando sair deste bloco não é possivel acessar a variável…. pelo menos eu acho….

  30. Naldo Vieira says

    Muito bom!
    De tanto procurar no google, esse foi o que mais me deu uma idéia de ajax já q eu n tinha noção de como implementar isso no meu site.

    Está de parabéns mesmo!!

  31. Márcioo says

    Muito o tutorial, parabéns! Muito o tutorial, parabéns!

    abraços.

  32. Sergio says

    Muito bom, Felipe.
    Finalmente consegui compreender como funciona o Ajax com o PHP.
    Parabéns!
    Me restou uma dúvida: como faço para informar, no php, que não quero que as informações já consultadas fiquem em cache?
    Outra coisa: na definição da função em javascript, a function lerId, na linha 5, está informando o script php lerId.php, e acredito que o correto é pegaid.php.

  33. Vilmar says

    Muito bom .

    Estou começando e estou tendo dificuldades de nome de arquivos, portanto gostaria que vc me enviasse os fontes por e-mail caso seja possivel.

  34. stones says

    Olá, tem como me enviar as fontes por e-mail tb estou tendo dificuldades :/

  35. wemrson says

    na segunda parte do seu tutorial vc nao explica direito os arquivos js que serao gerados. quem tem pouco conhecimento fica perdio facilmente.

  36. RobertoPC says

    Olá,

    Você sabe de algum método de carregar o AJAX antes de carregar a página PHP sem necessidade de chamar por qualquer um evento o ajax. Como o onLoad por exemplo.

    Vlw

    ;)

  37. Jeremias says

    Muito bom, para quem esta iniciando é um ótimo tutorial (Y)
    Meus parabéns



Some HTML is OK

or, reply to this post via trackback.