Ir para conteúdo

POWERED BY:

Arquivado

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

Tyron

Ajax Simultâneos

Recommended Posts

Olá!

Estou fazendo um código onde o Ajax deve retornar dois valores, diferentes, para minha página, ao mesmo tempo...

O que acontece é que, às vezes (quando dou o refresh da página rápido) o Ajax consegue enviar a resposta para os dois campos. Entretanto, se tento navegar normalmente, o Ajax responde somente ao SEGUNDO chamado, deixando o primeiro como "Carregando...".

Meus arquivos estão assim (coloquei a parte que envolve o script... precisando de mais alguma, é só pedir!!):

 

 

index.php

<script>function toggle(id){//comandos a serem executados quando o texto será exibido		var selecionados = document.getElementById('selecionados_'+id).value;				ajax('iframe_ajax.php?limpa','texto_'+id); //aqui está a primeira linha do ajax		ajax('iframe_ajax.php?altera_quantidade','quantidade_'+id); //segundo comando do ajax				}</script>

iframe_ajax.php

<?php header("Content-Type: text/html;  charset=ISO-8859-1",true);  $gmtDate = gmdate("D, d M Y H:i:s"); header("Expires: {$gmtDate} GMT"); header("Last-Modified: {$gmtDate} GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache");if (strstr($QUERY_STRING,"limpa") ) {echo "limpa";exit();}if (strstr($QUERY_STRING,"altera_quantidade") ) {echo "altera_quantidade";exit();}?>

ajax.js

// JavaScript Documentfunction ajax(url,local){req = null;// Procura por um objeto nativo (Mozilla/Safari)if (window.XMLHttpRequest)	{		req = new XMLHttpRequest();		req.onreadystatechange = processReqChange;		req.open("GET",url,true);		req.send(null);		// Procura por uma versão ActiveX (IE)	}else if (window.ActiveXObject)	{		req = new ActiveXObject("Microsoft.XMLHTTP");		if (req)			{				req.onreadystatechange = processReqChange;				req.open("GET",url,true);								req.send();			}	}function processReqChange(){// apenas quando o estado for "completado"if (req.readyState == 4) {// apenas se o servidor retornar "OK"if (req.status == 200) {document.getElementById(local).innerHTML = req.responseText;} else {alert("Houve um problema ao obter os dados:n" + req.statusText);}//fim do req.status}//fim do req.readyStateelse {document.getElementById(local).innerHTML = "Carregando...";}} //fim da funcao processReqChange()}

Como não consegui entender qual o problema, peço ajuda aos amigos do fórum.

Obrigado,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok! Estou tentando criar meu próprio script, acho que assim aprendo melhor.. Mas muito obrigado micox pela sua ajuda.

 

Caso mais alguém entre aqui para encontrar a solução, postei a código que deve ser alterado no meu original para que funcione. Perceba a parte alterada é a requisição do Ajax, que agora pertence a uma função (o que faz o código funcionar mais de uma vez). Eis o código:

 

ajax.js

function novoAjax(){if (window.XMLHttpRequest)	{		req1 = new XMLHttpRequest(); // Procura por um objeto nativo (Mozilla/Safari)			}else if (window.ActiveXObject)	{		req1 = new ActiveXObject("Microsoft.XMLHTTP"); // Procura por uma versão ActiveX (IE)	} return req1;}var req = novoAjax();	if(req){		req.onreadystatechange = processReqChange;		req.open("GET", url ,true);		req.send(null)		return true;	}else{		return false;	}
Um abraço a todos e um obrgiado especial ao micox que resolveu meu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria que fazer algo assim em cascata..Tipo assim que terminar uma chamar a outra..Entenda que o ajax e que nem uma URL normal do browser se tentar abrir dois url diferentes na mesma url so tera a ultima informada.(Me corrijam se tiver errado)Valeu..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, me deparei com este problema a algum tempo e finalmente consegui uma solução...

 

Eis a Solução:

chamar a variavel "req = new XMLHttpRequest()" e usa-la localmente... isto tbm implica em usar uma funcao local para "req.onreadystatechange = processReqChange"

 

ai abaixo vai o codigo:

 

function ajax(url,campo) {	var req = null;		try {		req = new XMLHttpRequest();		}	catch(erro1) {		try {			req = new ActiveXObject("Msxml2.XMLHTTP");			}		catch(erro2) {			try {				req = new ActiveXObject("Microsoft.XMLHTTP");				}			catch(erro3){				req = false;				}			}		}	if (req) {		req.onreadystatechange = function() { 	try {													if (req.readyState == 4)														if (req.status ==200)															document.getElementById(campo).innerHTML = req.responseText;														else															alert("Houve um problema na conexão: " + req.statusText);													else														document.getElementById(campo).innerHTML = 'Carregando...';													}													catch( e ) {														alert('Houve um problema na requisição: ' + e.description);													}												 };												req.open("GET",url,true);		req.send(null);		} 	}

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.