Ajax + Servlet

6 respostas
dmribeiro

Seguinte,

Meu Ajax chama um servlet que retorna um dado. No servlet a consulta em Sql é a seguinte:

O que preciso é que o Ajax execute automaticamente de tempo em tempo, chamando assim a servlet e retornando um resultado diferente a cada chamada.
Tentei usar o setInterval(), ele funciona, chama a função Ajax() no tempo determinado, porem não chama novamente a servlet.

Alguem poderia ajudar?

Ajax:

function Ajax(){	
	var xmlHttp;
		try{	
			xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
		}
		catch (e){
			try{
				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
			}
			catch (e){
			    try{
					xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e){
					alert("No AJAX!?");
					return false;
				}
			}
		}

	xmlHttp.onreadystatechange=function(){
		if(xmlHttp.readyState==4){			
			retorno = xmlHttp.responseText.split("|"); 					
			document.getElementById('imagem').innerHTML= '<img src="' + retorno[5] + '" height="150" widht="128">';			
			}		
		}
		xmlHttp.open("GET","controle_imagem",true);		
		xmlHttp.send(null);		
	}

	//window.onload=function(){						
			//setInterval('Ajax()',1000);			
		//}

6 Respostas

thiago.correa

Cara, não sei te dizer se tem como, mas dá uma olhada no dojo toolkit http://dojotoolkit.org/documentation/tutorials/1.7/ajax/ e veja se tu acha algo relacionado a isso.

WRYEL

use o setTimeout do javascript, ex:

function olaMundo() {
    alert("ola mundo!");
    setTimeout("olaMundo()", 1000); //agenda chamada para 1 segundo
}

olaMundo(); //chamado uma unica vez

[]'s

dmribeiro

o setTimeout() não se aplica no caso, pois preciso que a função execute de tempo em tempo, e não somente uma unica vez.
Por isso estou usando o setInterval(). A questão é que ele chama normalmente a função ajax no tempo estipulado, o problema é que
não entra no servlet controle_imagem quando chama o Ajax depois da primeira execução.

Newton_Angelini

Bom dia dmribeiro,

Passei por um problema similar que ocorria por causa do cache do navegador.

Dê uma olhada neste artigo, acho que ele pode te ajudar: http://spacebug.com/solving_browser_caching_problem_of_ajax-html/

FernandoFranzini

setInterval() não funciona em todos os navegadores! Teste com outros navegadores para ver.

dmribeiro

Conseguei resolver o problema,

Segui a dica do nosso amigo Newton Angelini. O problema ocorre por que o navegador armazema em cache a requisição feita pelo ajax.
Uma das soluções é passar como parametro na url uma função data ex: Date()getTime(), pois esta muda os segundos constantemente,
enganando asssim o navegador.

alteração feita (antes):

(depois da alteração):

var url = "controle_imagem?parametro=" + new Date().getTime(); 
xmlHttp.open("GET",url,true);

Valeu pela atenção galera.

Criado 30 de maio de 2012
Ultima resposta 31 de mai. de 2012
Respostas 6
Participantes 5