Não é feitiçaria, é Metodologia (essa foi de doer)! Este artigo contém informações de utilização do Ajax aliados ao JSP e MySQL. Devo advertir que não é meu objetivo ensinar JSP ou MySQL e que o principal foco deste artigo é o AJAX (Asynchronous JavaScript And XML) e seus recursos, como o XMLHttpRequest.
Criei uma página simples para facilitar o entendimento. Nela, temos um formulário com alguns campos, que irão enviar os parâmetros para a página que fará a inserção no banco de dados. Antes de proceder, é melhor que já tenha construído o seu banco de dados, no MySQL.
Crie um banco de dados no MySQL. Meu banco chama-se "projeto2", a tabela chama-se "geral2" e os campos são: codigo (auto incremento), nome, endereco, cidade, telefone, login e senha.
Você pode alterá-los, contanto que modifique as variáveis corretamente, tanto no Ajax quanto no HTML e JSP.
Esta página chama-se "formulario.jsp" e, após o clique no botão "Gravar", deverá enviar os parâmetros para a página "grava_usuario.jsp" e limpar os dados dom campos, preparando para uma nova inserção.
<html>
<head>
<title>Teste</title>
<script>
function verificacampos()
{
var nome = document.getElementById("nome").value;
var senha = document.getElementById("senha").value;
var login = document.getElementById("login").value;
if (senha == "" || login == "" || nome == "")
{
alert('É necessário digitar os campos Nome, Login e Senha corretamente');
return false;
}
else
{
salvar()
}
}
//esta é a função Ajax. Sem ela, nada acontece.
function openAjax() {
var ajax;
try{
ajax = new XMLHttpRequest(); // XMLHttpRequest para Firefox, Safari, dentre outros.
}catch(ee){
try{
ajax = new ActiveXObject("Msxml2.XMLHTTP"); // Para o Internet Explorer
}catch(e){
try{
ajax = new ActiveXObject("Microsoft.XMLHTTP"); // Para o Internet Explorer
}catch(E){
ajax = false;
}
}
}
return ajax;
}
function salvar()
{
var nome = document.getElementById('nome').value; //Note que as variáveis são resgatadas pela função getElementById.
var endereco = document.getElementById('endereco').value;
var cidade = document.getElementById('cidade').value;
var telefone = document.getElementById('telefone').value;
var login = document.getElementById('login').value;
var senha = document.getElementById('senha').value;
var exibeResultado = document.getElementById('exibeResultado');
var ajax = openAjax(); // Inicia o Ajax.
ajax.open("GET", "grava_usuario.jsp?nome=" + nome +"&endereco=" + endereco + "&cidade=" + cidade + "&telefone=" + telefone +"&login=" + login + "&senha="+ senha, true); // Envia o termo da busca como uma querystring, nos possibilitando o filtro na busca.
ajax.onreadystatechange = function()
{
if(ajax.readyState == 1) // Quando estiver carregando, exibe: carregando...
{
exibeResultado.innerHTML = "Inserindo";
}
if(ajax.readyState == 4) // Quando estiver tudo pronto.
{
if(ajax.status == 200)
{
var resultado = ajax.responseText;
exibeResultado.innerHTML = resultado;
}
else
{
exibeResultado.innerHTML = "Erro nas funções do Ajax";
}
}
}
ajax.send(null); // submete
document.getElementById("nome").value= "";//limpa os campos
document.getElementById("endereco").value= "";
document.getElementById("senha").value= "";
document.getElementById("login").value= "";
document.getElementById("cidade").value= "";
document.getElementById("telefone").value= "";
document.getElementById("nome").setFocus=true;
Note que os campos estão com "name" e com "ID". O campo "name" não é necessário, mas o campo "ID" é extremamente necessário. Note também que a Div "exibeResultado" é necessária, pois o Ajax utiliza-a para exibir os resultados da inserção.
Próximo passo: A página JSP que irá inserir os dados.
[5] Comentário enviado por ls_junior em 05/03/2007 - 08:01h
Muito bom o artigo, a única observação é quanto a utilização do innerHTML, que não funciona em todos os browsers. A solução que eu uso é a seguinte:
var o = document.getElementById("exibeResultado"); // pega o objeto
var node = document.createTextNode("Inserindo"); // cria um novo no de texto
for(var cont = 0; cont < o.childNodes.length; cont++) {
o.removeChild(o.childNodes[cont]); // remove todo o conteudo do objeto
}
o.appendChild(node); // adiciona o novo texto ao objeto
[6] Comentário enviado por brejao em 05/03/2007 - 12:09h
valew ls_junior. essa eu não sabia.... pessoal obrigado pelos comentários..
fico feliz que meu artigo seja útil...
fernandobrito, não importa a lingua que use, seja ZOPE, PHP ou ASP, qualquer uma delas terá o mesmo efeito se substituir minha página de gravação JSP por outra que manuseie o banco de dados, inserindo os registros corretamente, de acordo com os parâmetros resgatados do AJAX.
:)
[9] Comentário enviado por girinoboy em 10/04/2007 - 17:38h
Esse artigo é o melhor q encontrei, junta 3 ferramentas 1 pouco dificil de c utilizar, vc esta de parabens obrigado por ter feito esse artigo, vc praticamente salvol a minha vida, pra vicar otimo so completando com uma consulta...
vlw msm esse artido é muito util e tem q ser + divulgado!!!!
[11] Comentário enviado por PHD em 16/07/2007 - 14:46h
Mt Bom o artigo...
só uma dica, na leitura do formulário para armazenar os dados você poderia simplificar por exemplo por...
Function Varre(id)
{
// onde id é o ID do Form
var dados = new Array();
for( i=0; i < document.getElementById(id).elements.length; i++)
{
var aux = encodeURIComponent(document.getElementById(id).elements[i].name);
aux += "=";
aux += encodeURIComponent(document.getElementById(id).elements[i].value);
dados.push(aux);
}
return dados.join("&");
}
...assim pegaria os valores mais facilmente...
mais uma vez mt bom o artigo...
flw
[12] Comentário enviado por juliak em 21/01/2008 - 16:36h
Cara, estou com um problema ao usar esse modelo para enviar dados ao servidor e ao banco de dados. O primeiro envio é efetuado sem problemas, mas se for enviar as mesmas informações novamente, a página não é enviada. É como se ela ficasse no cache no navegador, sem ser processada novamente pelo servidor.
Exemplo: o usuário faz o login com sucesso, porém ao deslogar não consegue logar novamente porque a página, a ser carregada assincronamente, não é solicitada novamente ao servidor.
Alguém sabe como me ajudar?
[14] Comentário enviado por jpraminelli em 21/09/2009 - 17:08h
como faço para que em caso de sucesso , ao invés de exibir uma mensagem jogar o usuario para uma outra pagina ?
o comando jsp - response.sendRedirect("inicio.jsp"); parou de funcionar., invés de direcionar para a pagina inicio.jsp, ele esta exibindo a paginda dentro da div ...
[15] Comentário enviado por ktinho em 06/12/2010 - 15:47h
ai voce entende bem de ajax parabens voce poderia me ajudar com meu trabalho ele esta postado nesse post eu sou novo no linux eu so preciso tirar algumas duvidas me da um help la o linkin do post e esse: