O Bug do parse XML no IE com o ajax do jQuery

Post mais técnico seria impossível né? Enfim, se você leu o título e está lendo até agora é porque sabe do problema que estou falando: o ajax do jQuery tem um problema quando se trabalha com XML, o problema só acontece adivinha onde? No nosso querido browser Internet Explorer.

Mas como quase tudo na vida, tem solução:

Solução número 1 – Pare de trabalhar com XML e comece a usar JSON.

Solução número 2 – Existe um parseXML que funciona pro IE. E alguém de muita boa vontade que se chama Jonathan Sharp fez disso um plugin que pra jQuery que se chama XMLDOM .

E como funciona?

assim:

Forma normal (que normalmente dá erro no IE)

$.ajax({				
	url: 'xml/erros.xml, 
	type: "GET",
	dataType: "xml",
	contentType: "application/x-www-form-urlencoded; charset=UTF-8",
	success: function(xml){
		var htm ='';
		$(xml).find('item').each(function(n){
			htm += $(this).text();
		}
		$('#erros').append(htm);
	}
});

Com o plugin XMLDOM

$.ajax({				
	url: 'xml/erros.xml, 
	type: "GET",
	dataType: "html",
	contentType: "application/x-www-form-urlencoded; charset=UTF-8",
	success: function(xml){
		var htm ='';
		$.xmlDOM(xml).find('item').each(function(n){
			htm += $(this).text();
		}
		$('#erros').append(htm);
	}
});

E pra quem quiser evitar o trabalho, pode baixar o plugin direto aqui.

[]s

19 thoughts on “O Bug do parse XML no IE com o ajax do jQuery

  1. Qual o problema que ocorre no IE, Danilo?
    Nunca vi isso acontecer, até porque há tempos adotei a solução 1 para qualquer implementação! hehe

    []s!

  2. Tb nunca passei por este problema, uso XML varias vezes so para poder usar o magnifico plugin Taconite e nunca tive problemas.

  3. Pingback: Olá Mundo! » JQuery, quando XML não é lido no IE

  4. @Chris: Ele não consegue ler as tags, você consegue imprimir o retorno inteiro (o xml já parseado para string), mas o jQuery não consegue buscar na string…

    Eu sei disso porque estou passando por esse problema desde ontem, e só agora achei seu site e vou testar a segunda solução…

  5. Boa Danilão!

    É realmente um saco mexer com xml usando jQuery no iE6. Sorte nossa agora saber essa solução.

    Estou realmente de cansado do iE6, até quando teremos que nos preocupar com essa coisa ??

  6. Nesses dias, encontrei uma outra solução para quem quiser não optar pelo plugin e também continuar a usar JQuery. É essa aí:
    $.ajax({
    url: “data.xml”,
    dataType: ($.browser.msie) ? “text” : “xml”,
    success: function(data){
    var xml;
    if (typeof data == “string”) {
    xml = new ActiveXObject(“Microsoft.XMLDOM”);
    xml.async = false;
    xml.loadXML(data);
    } else {
    xml = data;
    }
    // Returned data available in object “xml”
    }
    });

    (fonte: docs.jquery.com)

  7. Só para contribuir…

    Se alguém estiver genrando o XML direto do PHP, pode usar a opção 1 sem problemas, basta colocar no arquivo php:
    header(“Content-Type: text/xml; charset=iso-8859-1”);
    echo “”;
    echo “seu conteudo xml”;

    Testado no IE8 e 6.

  8. Danilo, estava procurando por algo a respeito no google com “ajax xml jquery problem IE” [s/ aspas]. Teu blog foi a primeira ocorrência. :)
    Sua solução é boa, mas a do Alessandro Vieira ganhou pela simplicidade e atenta para o que não tinha percebido: sem o header, o browser acha que é html com tags erradas e não um xml. Agora o IE e também o FF renderizam como xml de verdade. Abs

  9. comigo só funcionou quando coloquei isso:

    echo “”;

    em cima dos meus xmls. mesmo usando o header() PHP

    :)

  10. Eu tô tentando integrar xml em um slideshow de noticias que utiliza jquery, só que não roda nem no mozilla e nem em nada. Vocês podem me ajudar?

    Att.

  11. Dr. Danilo, legal demais. Esperamos que implementem esta correção no jquery 1.3.+2.

    Deus te ajude.

  12. Eu sou novo no ambiente Web, consegui desenvolver uma aplicação web com PrimeFaces 2.2 que já funciona perfeitamente (no Mozilla Firefox), porém em qualquer versão do IE ele não funciona. Como e onde devo fazer aquela edição citada no post? Ou devo somente baixar o plugin e adicioná-lo ao projeto? Abri o jquery.js do PrimeFaces mas ele não contem este trecho de instruções.

    Peço humildemente uma dica! Obrigado

    Contato: robert.avano@projectus.com.br

Leave a Reply

Your email address will not be published. Required fields are marked *