Ajax com servlet

nao adianta…

se eu coloco ai a parte que atualiza o textfield do html e tiro de la de onde tava, ele simplesmente não escreve nada

se eu mantenho ele la onde tava (colocando ai ou não) ele da um undefined.

o servlet ta mandando o parametro:

response.getWriter().write(“recebido ok”);

a proxima linha ta aparecendo nromalmente no console do tomcat e sem exceptions no arquivo de log

System.out.println("\n\n linha depois do retorno ");

Sim… o javascript é como eu te disse…

O que falta agora é um flush.

response.getWriter().flush();

depois do write…

bom…tentando assim a saida fica em branco…

a pagina que aparece do exibir codigo fonte, ou a opção codigo fonte do opera clicando com o direito é essa:

<html>   
<body>   
<script type="text/javascript">   
  
var texto;   
  
function ajaxFunction(){   
     var req;   
     var isIE;   
     if (window.XMLHttpRequest) {   
            req = new XMLHttpRequest();   
     }else if (window.ActiveXObject) {   
            isIE = true;   
            req = new ActiveXObject("Microsoft.XMLHTTP");   
     }   
     var url= "http://127.0.0.1:8080/ajax?receber=flavio";     
     req.onreadystatechange = processRequest;   
     req.open("GET", url, true);     
     req.send(null);   

}     
  
function processRequest() {   
     if (req.readyState == 4) {   
         if (req.status == 200) {
	     document.formulario.saida.value=req.responseText;   
         }   
     }   
}   
</script>   
<form name="formulario">   
entrada: <input type="text" onkeyup="ajaxFunction();" name="entrada" />   
saida: <input type="text" name="saida" />   
</form>   
</body>   
</html>

o servlet foi atualizado:


import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class ServletAjax extends HttpServlet { 
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        
        //System.out.println("\n linha antes do request ");

        
        String entrada = request.getParameter("receber").trim(); 
        
        
        System.out.println("recebido " +entrada+" com sucesso");
        
        response.getWriter().write("recebido ok"); 
        
        response.getWriter().flush();
        
        System.out.println("\n\n linha depois do retorno ");
     } 
} 

não sei o que possa ser…

agradeço de novo… to te dando mó trabalho…

dé uma alert ali… veja se aparece…

 function processRequest() {     
      alert('trocou o status');
      if (req.readyState == 4) {     
          if (req.status == 200) {  
            alert('agora ele escreve');
          }     
      }     
 }     

tentando colocando do jeito q tava antes, jogando o retorno na variavel e exibindo depois de tudo, ainda mostra o undefined…

pra mim tem sentido funciona se atualiza de la…mais nao ta resolvendo…

nenhum problema no log

da maneira como tu quer nao vai funcionar nunca…
a funcao processRequest é chamada implicitamente pelo browser a cada troca de status…
a variavel após o send sempre estará undefined.

bom…tentei fazer como vc falou e não adianto muito botei um alert fora dos if e outro dentro…só exibiu o de fora…

segue o codigo:

<html>   
<body>   
<script type="text/javascript">   
  
var texto;   
  
function ajaxFunction(){   
     var req;   
     var isIE;   
     if (window.XMLHttpRequest) {   
            req = new XMLHttpRequest();   
     }else if (window.ActiveXObject) {   
            isIE = true;   
            req = new ActiveXObject("Microsoft.XMLHTTP");   
     }   
     var url= "http://127.0.0.1:8080/ajax?receber=flavio";     
     req.onreadystatechange = processRequest;   
     req.open("GET", url, true);     
     req.send(null);   

}     
  
function processRequest() {   
	alert ("primeiro alert");
     if (req.readyState == 4) {   
         if (req.status == 200) {
	     texto=req.responseText; 
		alert("retorno =  "+texto);  
         }   
     }   
}   
</script>   
<form name="formulario">   
entrada: <input type="text" onkeyup="ajaxFunction();" name="entrada" />   
saida: <input type="text" name="saida" />   
</form>   
</body>   
</html>

preciso sair daqui pq tão fechando a empresa, maisao chegar em casa eu olho a resposta…

obrigadão denovo pelas respostas…

cara… se não tá entrando no if é pq a requisição nao ta funcionando…
ou seja teu servlet ainda tá errado…

faz assim
coloca esse endereco (http://127.0.0.1:8080/ajax?receber=flavio) no teu navegador… e veja o que acontece… se nao funcionar pelo navegador… tb nao vai funcionar no ajax.

Use uma lib em js que abstraia essas coisas burocráticas de ajax javascript:

http://www.sergiopereira.com/articles/prototype140.js.ptBR.html

Ex: Prototype:

function buscaVendas(){
	
		var empID = $F('lstEmpregados');
		var y = $F('lstAnos');
		var url = 'http://servidor/app/busca_vendas';
		var pars = 'empID=' + empID + '&ano=' + y;
		
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: pars, 
				onComplete: mostraResposta
			});
		
	}

	function mostraResposta(requisicaoOriginal){
		//copia o XML retornado para o textarea
		$('resultado').value = requisicaoOriginal.responseText;
	}

bom…to em casa e nao da pra fazer isso agora… de manha eu vo tentar ver o que consigo resolver la…

vo vese do mais uma lida sobre servlets, pois deve ser o retorno queta com problemas (pq ta recebendo, ja que ta imprimindo normalmente no console do tomcat pelos println, tanto o de antes como de depois da linha querecebe o valor, sem da nenhuma exceção)

obrigado denovo pelas dicas nbluis, vc me ajudo bastante…

obrigado também pedrosa pelo exemplo, eu vo estudaele ever o queque posso aproveita… aoqueli rapido de repente monto algo pra automatiza envio e recebimento de valores…

bom…vlw ae a todos…

pois é…eu estranhei nao entra nos if, por que o javascript ta enviando ok a string e o servlet imprime ela no console do tomcat… não ta é retornando acredito eu que é pq o javascript não entra nos if…eu vo tenta analisa eles mais a fundo ou algo assim…

ao tenta acessa pelo navegador apareceu la “recebido ok”…

o que deveria aparecer… disconfio que seja no if do javascript…

bom, qualquer contribuição é muito bem vinda, valeuzão…

aeee consegui, usando um tuto do moozila que encontrei na net.

http://developer.mozilla.org/pt/docs/AJAX:Como_começar

o que eu fiz pra fazer funcionar, foi ter colocado o req.overrideMimeType(‘text/xml’) por motivos explicados no tuto, e forçar a função, tb explicado como no tutorial, apesar de não saber qual a diferença pois tava entrando nela do mesmo jeito, só não no if, (pq q isso mudo eu ainda não sei).

não intendi bem o motivo de funciona assim pq antes tava chamando a função normalmente mais não entrava no if, conforme verificado…

segue o codigo que ficou (com umas mudança basicona só pra atualiza na segunda TextField, o conteudo da primeira):

<html>   
<body>   
<script type="text/javascript">   
  
var texto="não ta funcionando";   
  
function ajaxFunction(){   
     var req;   
     var isIE;   
     if (window.XMLHttpRequest) {   
            req = new XMLHttpRequest();   
     }else if (window.ActiveXObject) {   
            isIE = true;   
            req = new ActiveXObject("Microsoft.XMLHTTP");   
     }   
     //req.overrideMimeType('text/xml');	<-- se eu descomenta isso não tava funcionando no ie
     var url= "http://127.0.0.1:8080/ajax?receber="+document.formulario.entrada.value;  
     //initRequest(url);  
     req.onreadystatechange = function(){

	if( req.readyState == 4 && ( req.status == 200 || req.status == 500 ) ) {   
         
		texto=req.responseText; 
		//alert("retorno =  "+texto);  
		document.formulario.saida.value=texto;
           
     	}


     };         
     req.open("GET", url, true);   		  
     req.send(null);   

	

}     
  
  
</script>   
<form name="formulario">   
entrada: <input type="text" onkeyup="ajaxFunction();" name="entrada" />   
saida: <input type="text" name="saida" />   
</form>   
</body>   
</html>

Bom Noite…

Estou tentando fazer uma interação simples com ajax e servlet mas o resultado não fica na tela. Pelo que intendi após o resultado ser escrito na página, a página se atualiza e apaga o resultado.
Segue o código.

SERVLET

@WebServlet("/adicionaContato")
public class AdicionaContato extends HttpServlet {

protected void service(HttpServletRequest request,
		HttpServletResponse response) throws IOException, ServletException {
	//
	PrintWriter out = response.getWriter();

	//
	String nome = request.getParameter("nome");

	out.println("Contato " + nome);

}

}

HTML

<html>
<head>
<meta charset=“ISO-8859-1”>
<title></title>
<script>
var xmlhttp;

function myFunction() {
	var n = document.getElementById("nome").value;
	xmlhttp = new XMLHttpRequest();
	xmlhttp.open("GET", "adicionaContato?nome=" + n, true);
	xmlhttp.send();
	xmlhttp.onreadystatechange = retorno;

}
function retorno() {
	if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
		document.getElementById("myDiv").value = xmlhttp.responseText;
	}
}

</script>
</head>
<h1>Mostra Contatos</h1>
<hr />
<form>
Nome: <input type=“text” id=“nome” />

<input onclick=“myFunction()” type=“submit” value=“Gravar” />

</form>
<input id=“myDiv”></input>
</html>

Bom Noite…

Estou tentando fazer uma interação simples com ajax e servlet mas o resultado não fica na tela. Pelo que intendi após o resultado ser escrito na página, a página se atualiza e apaga o resultado.
Segue o código.

SERVLETS

[code]

@WebServlet("/adicionaContato")
public class AdicionaContato extends HttpServlet {

protected void service(HttpServletRequest request,
		HttpServletResponse response) throws IOException, ServletException {
	//
	PrintWriter out = response.getWriter();

	//
	String nome = request.getParameter("nome");

	out.println("Contato " + nome);

}

}


HTML

Mostra Contatos


Nome:
[/code]