Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hedi

Como resolver o problema do "travamento" usando ajax?

Recommended Posts

Pessoal estou com um problemão usando o ajax (acho que o maior deles) , acontece que tenho uam pagianque atuliza o conteúdo a cada 1,5 segundos, mas se a internet der um gargalo ou estiver lenta, pronto a resposta nao vem e a pagina trava, trava o navegador quase. peço ajuda do pessoal que entende bem de ajax se tem como contornar isso.obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso mesmo. O terceiro parametro indica se a requisição será sincrona (true) ou não. Se você deixar síncrona, todo o resto do seu script trava esperando o retorno.

Por isso aconselha-se a usar assíncrono. Só que pra isso você deverá setar o onreadystate.

Talvez a função ajax que eu fiz te ajude. De uma testada nela ae...

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta true sim vejam, tem que estar false?:CODE<script src="ajax.js" language="javascript" type="text/javascript"></script><script>function ler() {objeto = new cria; objeto.open("GET", "ler_chat.php", true); objeto.onreadystatechange = function() { // if(objeto.readyState == 2){ parent.document.getElementById("car").innerHTML= '<img src="carregando.gif" width="22" height="22">'; // }else{ // document.getElementById("car").innerHTML= ""; // } if(objeto.readyState == 4) { if(objeto.status == 200) { parent.document.getElementById("car").innerHTML= ""; document.getElementById("mostrar").innerHTML= objeto.responseText; } else { alert("Falha: " + objeto.statusText); } } } objeto.send(null); setTimeout("ler()",1500);}valews

Compartilhar este post


Link para o post
Compartilhar em outros sites

ôooo hedi, foi mal cara. Eu me confundi. você está fazendo certo. O true é pra assíncronos e false é pra síncronos mesmo. Inverti as coisas.Voltando à sua função: Pelo que lí aí na sua função, tá tudo certo aparentemente. Vou dar uma pensada aqui e te respondo.Voce chegou a usar minha função lá pra ver se resolve seu problema?PS.: Não duplique suas respostas ou seus posts. É contra as regras do fórum.vou pensar aqui. té mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que achei as solução!

 

vejam o erro neste codigo:

CODE<script src="ajax.js" language="javascript" type="text/javascript"></script><script>function ler() {objeto = new cria;objeto.open("GET", "ler_chat.php", true);objeto.onreadystatechange = function() {parent.document.getElementById("car").innerHTML= '<img src="carregando.gif" width="22" height="22">'; if(objeto.readyState == 4) {if(objeto.status == 200) {parent.document.getElementById("car").innerHTML= "";document.getElementById("mostrar").innerHTML= objeto.responseText; } else {alert("Falha: " + objeto.statusText);}}}objeto.send(null);//--------------------------veja o erro aqui-------------------------------------------//como é assincrono ele continua executando o  codigo mesmo sem a resposta certo, ai chega no timeout, ele executa a função novamente e abre outra conexão com o mesmo objeto! ai lasco tudo! estava lendo sobre isso, e isso teria um comportamendo muito mal heehe por exemplo travar!setTimeout("ler()",1500);}

 

o código correto:

 

function ler() {objeto = new cria;   objeto.open("GET", "ler_chat.php", true);   objeto.onreadystatechange = function() {	 if(objeto.readyState == 4) {	if(objeto.status == 200) {	 parent.document.getElementById("car").innerHTML= "";	document.getElementById("mostrar").innerHTML= objeto.responseText; //--------------------------correção do erro-------------------------------------------//aora sim ele somente exeuta de novo após a resposta do pedido anterior, assim se a conexão estiver lenta so vai demorar mais pra respondersetTimeout("ler()",1000);	 } else {	   alert("Falha: " + objeto.statusText);	}	 }   }   objeto.send(null);	parent.document.getElementById("car").innerHTML= '<img src="carregando.gif" width="22" height="22">'; }

valews acho que e isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa...FAz o seguinte também: coloca um objeto=null no final da onreadystate (no readystate=4) pra limpar o bixo de vez da memória. Testae... Mas se resolveu, beleza.

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora surge outro problema, e se noa vier a resposta?tava pensano em fazer um jeito que se nao vier em 10 segundos executa novamente, tem ideia de como faço isso?valews

Compartilhar este post


Link para o post
Compartilhar em outros sites

vejam, um meigo me deu a ideia da como fazer se travar:

fejam se tem logica rssrrs

valews

 

 

<script>// esta função responsavel por abortar o objeto atual e eexecutar a ler novamente:function reenvia(){objeto.abort();ler();}function ler() {objeto = new cria;   objeto.open("GET", "ler_chat.php", true);   objeto.onreadystatechange = function() {	 if(objeto.readyState == 4) {		  // if(objeto.status == 200) {					parent.document.getElementById("car").innerHTML= "";					document.getElementById("mostrar").innerHTML= objeto.responseText; //se obteve resposta cancela o time out na função reenvia					clearTimeout(re);					setTimeout("ler()",1000);							 // } else {		//	  alert("Falha: " + objeto.statusText);		 // }		objeto=null;	 }   }   objeto.send(null);  parent.document.getElementById("car").innerHTML= '<img src="carregando.gif" width="22" height="22">'; // seta o time out na função reenvia, se a função ler nao obtiver respota em 10 segundos, a função reenvia aborta o objeto atual e executa a ler novamente var re= setTimeout("reenvia()",10000);}</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

corrigindo o uma falha nossa hehe:

 

function reenvia(){objeto = new cria;objeto.abort();ler();}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.