Problemas com FireFox e Ajax Sincronizado

10 respostas
H

Pessoal,

estou fazendo uma função em que é necessário o uso do Ajax Sincronizado, entretanto estou tendo problemas com o FireFox (o IE funciona legal). Vejam no código abaixo que o alert explode na tela normalmente com o IE, mas no FireFox não funciona. Se eu usar o Ajax Assincrono funciona legal, mas sincrono necas…

Alguém tem alguma dica?

function getBrowser()
{
	if(window.XMLHttpRequest)
	{
		return "mozilla";
	}
	else if(window.ActiveXObject)
	{
		return "ie";
	}
}

function doXMLRequester()
{
	if(getBrowser() == "ie")
	{
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	else if(getBrowser() == "mozilla")
	{
		return new XMLHttpRequest();
	}
}


function ajax()
{
	var xmlRequest = doXMLRequester();

	xmlRequest.open("GET", "/MeuSistema/Teste", false);
	
	xmlRequest.onreadystatechange = function()
	{
		if (xmlRequest.readyState == 4) 
		{
			if (xmlRequest.status == 200)
			{
				alert(xmlRequest.responseText);
			}
		}
	};
	
	xmlRequest.send(null);
}

10 Respostas

plentz

Não dá nenhum erro de Javascript?BTW, tente o seguinte.

function getBrowser() {
	if(window.XMLHttpRequest){
		return "mozilla";
	}else if(window.ActiveXObject){
		return "ie";
	}
}

function doXMLRequester(){
	if(getBrowser() == "ie"){
		return new ActiveXObject("Microsoft.XMLHTTP");
	}else if(getBrowser() == "mozilla"){
		return new XMLHttpRequest();
	}
}

function ajax(){
	var xmlRequest = doXMLRequester();
	xmlRequest.open("GET", "/MeuSistema/Teste", false);
	xmlRequest.onreadystatechange = function(){
		if (xmlRequest.readyState == 4) {
			if (xmlRequest.status == 200){
				alert(xmlRequest.responseText);
			}else{
				alert("Ops!");
			}
		}
	}
	xmlRequest.send(null);
}
cv1

Perai… AJAX Sincronizado? O primeiro ‘A’ de AJAX nao era pra ser ‘Asynchronous’?

Fabricio_Cozer_Marti

Mas existem situações que vocÊ força que o ajax seja síncrono. o DWR por exemplo tem essa opção , setando pra false DWREngine.setAsync(false);
http://getahead.ltd.uk/dwr/browser/engine/options

cv1

Sim, mas daih eh SJAX :wink:

Parece a galera que fala ‘PIN Number’, ‘Protocolo TCP’… :slight_smile:

H
diego_sl:
Não dá nenhum erro de Javascript?BTW, tente o seguinte.
function getBrowser() {
	if(window.XMLHttpRequest){
		return "mozilla";
	}else if(window.ActiveXObject){
		return "ie";
	}
}

function doXMLRequester(){
	if(getBrowser() == "ie"){
		return new ActiveXObject("Microsoft.XMLHTTP");
	}else if(getBrowser() == "mozilla"){
		return new XMLHttpRequest();
	}
}

function ajax(){
	var xmlRequest = doXMLRequester();
	xmlRequest.open("GET", "/MeuSistema/Teste", false);
	xmlRequest.onreadystatechange = function(){
		if (xmlRequest.readyState == 4) {
			if (xmlRequest.status == 200){
				alert(xmlRequest.responseText);
			}else{
				alert("Ops!");
			}
		}
	}
	xmlRequest.send(null);
}

Então Diego,

dessa forma o alert irá explodir na tela com certeza, mas o alert nesse exemplo que passei é só pra mostrar até onde a execução chega, pois eu preciso na verdade é do xmlRequest carregado com o responseText, e no FireFox isso não ocorre. Mesmo removendo todos os if não consigo ter o objeto carregado.

Alguma outra dica?

J

Substitua a sua função getBrowser por essa e veja se funciona:

function getBrowser() { if (window.XMLHttpRequest) { a=new XMLHttpRequest(); } //Objeto nativo (FF/Safari/Opera7.6+) else { try { a=new ActiveXObject("Msxml2.XMLHTTP"); //activeX (IE5.5+/MSXML2+) } catch(e) { try { a=new ActiveXObject("Microsoft.XMLHTTP"); //activeX (IE5+/MSXML1) } catch(e) { /* O navegador não tem suporte */ a=false; } } } return a; }

A

Utilizei o código dessa forma, funcionou, mas ainda não sei sobre possíveis efeitos colaterais.

function getBrowser() {
	var XMLHttpRequestObject = false;
	if (window.XMLHttpRequest) {
		XMLHttpRequestObject = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return XMLHttpRequestObject;
}

function ajax(data) {
	xmlHttp = getBrowser();
	xmlHttp.open("GET", data, false);
	xmlHttp.send(null);
	return xmlHttp.responseText;
}

function getData(data) {
	//exemplo
	if ( !confirm(ajax(data)) )
		return false;
	else
		return true;
}
R

Também tive esse problema. Consegui resolver utilizando o prototype.
Para facilitar, segue em anexo o meu código.

function bla()

{

ret_bd = 0
new Ajax.Request("le_agenda.php", {
    method: 'post',
    asynchronous: false,
    parameters:"id_agenda=0",
    onComplete:function(transport) {
                    
                        var retorno = transport.responseText;
                    
                        var saida = eval ("(" + retorno + ")");
                    
                        if (saida.erro!="") 
                        {
                            alert ("MYSQL ERRO:" + saida.erro);
                        
                            ret_bd = false;
                            return;
                        }
                        
                        ret_bd = saida.ret;
                }
});

return ret_bd;

}

fiabani

cara, resolvi o meu problema entre ajax síncrono e firefox, creio que meu artigo possa te ajudar tbm

fiabani

Pessoal, descobri algo simples, porém muito eficaz em determinadas ocasiões onde torna-se necessária a abolição dos reloads, desta vêz sem ajax
confiram, é simples mas vale a pena:

Criado 18 de junho de 2006
Ultima resposta 22 de jan. de 2009
Respostas 10
Participantes 8