Ir para conteúdo

POWERED BY:

Arquivado

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

edbello

[Resolvido] AJAX parou de funcionar no IE 7/8

Recommended Posts

Salve Galera,

 

Sei que este assunto já é bem batido, mas já estou há 5 horas pesquisando na net e não encontro solução.

 

Tenho uma lista de estados do Brasil, num campo select e, quando o usuário escolhe o Estado, o AJAX + PHP buscam no BD todos os municípios daquele Estado e os exibe em outro select.

 

Funciona perfeitamente no Mozilla Firefox, Opera Browser e no Google Chrome. Só no ¨%$*(&¨*(&*%¨do Internet Explorer que não funciona.

 

Alguém tem alguma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo sem o fonte fica dificil ajudar aqui utilizo sempre ajax com jQuery e normal sempre o bom de utilizar o jQuery é isso nao precisa se preocupar com "navegadores" ou melhor ***** IE :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue o fonte:

 

HTML/PHP

<select name="estado" size="1" class="campos_interno" id="estado" onchange="buscaCidades(this,0)" >
            <option value="26">Escolha seu Estado!</option>
            <?php while ($row_estados = mysqli_fetch_assoc($estados)){ ?>
            <option id="<?php echo $row_estados['id']; ?>" value="<?php echo $row_estados['id']; ?>" ><?php echo utf8_encode(($row_estados['estado'])); ?></option>
            <?php }	?>
          </select>
Objeto AJAX

function openAjax()
{
	try
	{
		var ajax = new XMLHttpRequest();
	}
	catch(e)
	{
		try
		{
			//var ajax = new ActiveXObject("Msxml2.XMLHTTP");
			var ajax = new ActiveXObject("MSXML3.XMLHTTP");
		}
		catch(ee)
		{
			try
			{
				var ajax = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(eee)
			{
			    var ajax = false;
			}
		}
	}
	
	return ajax;
}

 

Javascript AJAX

function buscaCidades(est, todos)
{
	
	if( isNaN(est) ) { 	
	 var estado_ref = document.getElementById('estado'); 
	 var est = estado_ref.options[estado_ref.selectedIndex].id;
	}
	
	
	var cidades = document.getElementById('cidade');
	cidades.innerHTML = '';
	var op = document.createElement('option');
    op.setAttribute('value', '');
    op.appendChild(document.createTextNode("Carregando..."));
    cidades.appendChild(op);
	
	if(cidades.disabled == true)
		cidades.disabled = false;		
		
	var url = '/includes/funcoes.php?acao=buscaCidades&uf=' + est;
	var ajax = openAjax();
	ajax.open('GET', url, true);
	
	{
		if (ajax.readyState == 4)
		{ 
			if (ajax.status == 200)
			{
				cidades.innerHTML = '';
				var xml = ajax.responseXML;
				var cidade = xml.getElementsByTagName('cidade');
				
				if(todos == 1)
				{
					var op_todos = document.createElement('option');
					op_todos.setAttribute('value', 'todas');
					op_todos.appendChild( document.createTextNode( 'Todas' ) );
					cidades.appendChild(op_todos);
				}						
				
				for (var i = 0; i < cidade.length; i++)
				{
					var nomeCidade = cidade[i].getElementsByTagName('nome')[0].firstChild.nodeValue;
					var idCidade = cidade[i].getElementsByTagName('id')[0].firstChild.nodeValue;
			        		
					var opcao = document.createElement('option');
					opcao.setAttribute('value', nomeCidade);
					opcao.setAttribute('id', idCidade);
					opcao.appendChild(document.createTextNode(nomeCidade));
					cidades.appendChild(opcao);
				}
			}
		}
	}
	ajax.send(null);
}
PHP AJAX

function buscaCidades()
{
	$uf = isset($_GET['uf']) ? $_GET['uf'] : 26;
	
	global $xml;

	$xml .= '<cidades>';
	
	$MySQLi = new CONEXÂO;
	
	$sql = $MySQLi->query('SELECT cidade.cidade, cidade.id FROM cidade WHERE cidade.id_estado = ' .$uf. ' ORDER BY cidade.cidade ASC');
	
	while ($f = $sql->fetch_object())
	{
		$xml .= '  <cidade>';
		$xml .= '    <nome>' . utf8_encode($f->cidade) . '</nome>';
		$xml .= '    <id>' . $f->id . '</id>';
		$xml .= '  </cidade>';
	}
	
	$sql->close();
	$MySQLi->close();
	
	$xml .= '</cidades>';
	echo $xml;
}

 

 

Esqueci de dizer... Isso tá num site em Joomla!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estava com o mesmo problema, o ajax eu estava usando para carregas a página mais rapido, porém no internet explorer ele não funcionava... se o ajax abrir alguma página com include php... sendo que em todo o resto funcionava.

 

Moral: Tive que retirar o ajax, ficar com as páginas mais lentas porque 60% das pessoas ainda usam essa &¨@%$*&@%*& de IE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é... só que não tenho como retirar o AJAX deste site, isso pediria uma total reformulação do projeto. Hehehe...

Mas meu colega de trabalho conseguiu encontrar uma solução.

 

1 - Se o AJAX gera um arquivo XML, é necessário que esteja na mesma codificação de caracteres que o site, no meu caso aqui, em UTF-8;

 

2 - Se o resultado é em HTML, existe um BUG (mais um) do IE7/8 que impede a visualização. Para contorná-lo, é necessário colocar a resposta HTML dentro de tags <span>.

 

Vai entender esses bugs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que o teu instanciamento do AJAX está insuficiente. Troque por:

 

var xmlhttp = getXmlHttpRequest();
function getXmlHttpRequest(){
        if(window.XMLHttpRequest){
                return new XMLHttpRequest();
        }else if(window.ActiveXObject){
                try{
                        return new ActiveXObject("Msxml2.XMLHTTP");
                }catch (e){
                        try{
                                return new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e){}
                }
        }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

edbello teria como você posta a solução aqui, estou com o mesmo problema li o topico que você citou onde acho a resposta mais não entendi muito bem

a requisição do ajax em qualquer outro navegador inclusive ie, funciona menos n a versao do ie 7

 

ele so fica no estagio de "carregando"

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.