Update com AJAX

25/03/2011

0

Galera, sou iniciante e estou com uma duvida na utilização de Ajax!

Tenho uma jsp chamada "consulta" que faz uma consulta no bd e preenche uma tabela. Nesta tabela na frente de cada registro tem um botão que deve ser utilizado para mudar o status de um campo do bd (Quero fazer esse processo de alteração de status (SIM/NÃO) com ajax.).

Desta forma criei a função javaScript, que chama outra jsp chamada ajaxConfere, essa pagina está funcionando corretamente, ela somente recebe um ID e faz o update no id selecionado. Até ai tranquilo.

Porem, quando clico no botão (evento onClick) ele não está chamando a função do Ajax. Segue abaixo o código da pagina consulta para melhor entendimento:

Função java Script:
<code>
  <script type="text/javascript">    function Confere(id){            if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari          xmlhttp=new XMLHttpRequest();      }      else {// code for IE6, IE5          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");      }      xmlhttp.onreadystatechange=function(){          if (xmlhttp.readyState==4 && xmlhttp.status==200)  {              document.getElementById("myDiv").innerHTML=xmlhttp.responseText;          }      }       alert(id);            xmlhttp.open("GET","ajaxConfere.jsp?id="+id+"",true);      xmlhttp.send();  }  </script>   </code>

Tabela com o botão que chama a função Confere:

<code>
while (rs.next()){      SimpleDateFormat sdf= new SimpleDateFormat("dd/MM/yyyy");      Date agora = rs.getDate ( "data");            NumberFormat nf = NumberFormat.getCurrencyInstance();      String valorFormatado = nf.format(rs.getDouble("saldo"));            out.println("<tr>");                out.println("<td bgcolor='#D9D9F3'><center>" + rs.getString("num_conta") + "</center></td>");        out.println("<td bgcolor='#D9D9F3'>" + rs.getString("desc_conta") + "</td>");        out.println("<td bgcolor='#D9D9F3'><center>" + rs.getString("desc_pac") + "</center></td>");        out.println("<td bgcolor='#D9D9F3'>" + rs.getString("desc_usuario") + "</td>");        out.println("<td bgcolor='#D9D9F3'>" + (valorFormatado) + "</td>");        out.println("<td bgcolor='#D9D9F3'><center>"+sdf.format(agora)+"</center></td>");        out.println("<td bgcolor='#D9D9F3'>" + rs.getString("conferido") + "</td>");        out.println("<td > <button type=button onclick=Confere("+rs.getString("id")+")> OK </button> </td>");              out.println("</tr>");  }   </code>

Na ultima linha tem o botão que chama a função, ai que está o problema! Ele não funciona dentro da tabela. Se por acaso eu tiro esse botão do loop (ai vai mostrar só um botão) e coloco fora passando um Id padrão funciona perfeitamente, no caso fica desta forma:

<code>
out.println("<td > <button type=button onclick=Confere(2)> OK </button> </td>");   </code>

Chamo a função passando um código padrão pra testar, ai funciona.

O problema é que preciso disso na tabela, cada botao tem que ter o ID do registro selecionado. Percebi que nem chama a função, pq coloquei uma alerta dentro dela e não aparece.

Alguem tem uma LUZ???

Abraços...Desde já agradeço....
Max Costa

Max Costa

Responder

Posts

25/03/2011

Dyego Carmo


  coloque no evento onclick para

javascript:cofere....
Habilite o Firebug de seu firefox e veja se seu script nao esta com erro !
Responder

28/03/2011

Max Costa

Dyego, vlw pela ajuda cara!

Na verdade eu estava testando no IE, ai passei a usar o FireFox agora.
Com isso, antes daquela tela, tenho outro botão de consulta, também AJAX. Então acho melhor resolver esse problema primeiro. abaixo o código do botão consultar:

 out.println("<button type=button javascript:onclick=consultaSaldos(dataInicial.value,dataFinal.value,id_pac.value)>Consultar</button>");


Abaixo a função que o botão está chamando:

<head>

<script type="text/javascript">
function consultaSaldos(dataInicial, dataFinal, idPac){
    
    if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
      }
    else {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function(){
          if (xmlhttp.readyState==4 && xmlhttp.status==200)  {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
     } 
    
    //alert(dataInicial);    
    //alert(dataFinal);
    //alert(idPac);
        
    xmlhttp.open("GET","ajaxConsulta.jsp?dataInicial="+dataInicial+"&dataFinal="+dataFinal+"&idPac="+idPac+"",true);
    xmlhttp.send();
    
}
</script>
</head>



No ie funciona, mas no fire fox quando clico em consultar não acontece nada.

Agradeço novamente pela ajuda.
Responder

28/03/2011

Max Costa

Estava olhando no Firebug, o erro que aparece é so seguinte:

"dataInicial is not Defined"

Estou pegando esse valor nesse input:

out.println("Data inicial:");
  out.println("<input type=text name=dataInicial>");
    
  out.println("Data Final:");
  out.println("<input type=text name=dataFinal>");    


Existe outra forma de recuperar o valor do input para passar como parametro para função?


Responder

29/03/2011

Max Costa

Ta, resolvi o problema da data também, apenas coloquei id=dataInicial.... Resolveu o problema.

Agora voltando para o primeiro problema, no qual tenho que chamar a função javascript por meio do botão adcionado a cada registro da tabela. O Firebug diz que não é possível encontrar a função Confere() "Confereis not defined".

Neste caso, todo esse código está na pagina "confere.jsp", primeiro tenho a função java script, depois tenho o código que carrega a tabela com os dados do bd e adciona o botão. Não entendi porque não acha a função...

<script type="text/javascript">
function Confere(id){    
    if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
      }
    else {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function(){
          if (xmlhttp.readyState==4 && xmlhttp.status==200)  {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
     } 
    alert(id);    
    xmlhttp.open("GET","ajaxConfere.jsp?id="+id+"",true);
    xmlhttp.send();
}
</script>


para chama-la:

 out.println("<td > <button type=button onclick=javascript:Confere("+rs.getString("id")+") > OK </button> </td>");


Erro: "Confereis not defined".



Responder

04/04/2011

Dyego Carmo

Opa !

Resolvido ?

Então feche por favor !

Responder

04/04/2011

Robson Teixeira

Kra coloque a sua função confere num arquivo js e inclui ele quando for rendezar a sua a pagina no caso as Strings que são colocadas no PrintWrite tente isso ok??

qualquer coisa é so chamar

att
 robson Passarella
Responder

12/04/2011

Dyego Carmo

Exato ;0
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar