como receber XML no IE8 com mootools
-
05-07-2019 - |
Pergunta
Estou fazendo um web onde eu fortemente usar solicitações de AJAX para um serviço XML. Na verdade, o meu web é um front-end com quase nenhum servidor qualquer e usa AJAX para se comunicar com o back-end.
Tudo estava indo bem (I desenvolvido e testado no Ubuntu 9.04 e Firefox 3.0 como um navegador). Um dia eu decidi ver como o meu web fez no IE8 ... horror!
Nada estava funcionando como maravilhosamente fez no Firefox. Para ser mais específico, o Request.HTML do não estavam funcionando. Como eu disse, a minha web dependia fortemente de que, por isso, nada funcionou.
Passei um dia tentando obter algo em execução, mas não tive sorte .. A única conclusão a que cheguei foi que o XML foi analisado incorretamente (Espero que eu estou em erro). Vamos para o código:
var req = new Request.HTML({
url: 'service/Catalog.groovy',
onSuccess: function(responseTree, responseElements) {
var catz = responseElements.filter('category');
catz.each(function(cat){
// cat = $(cat);
var cat_id = cat.get('id');
var subcategory = cat.getElement('subcategory');
alert(cat_id);
alert(cat.get('html'));
alert(subcategory.get('html'));
}
},
onFailure: function(){...}
});
Por exemplo, aquele pedaço de código. No Firefox, ele funcionou perfeitamente. É alertado uma identificação (por exemplo, 7), em seguida, ele mostrou o conteúdo do elemento de categoria, por exemplo:
<subcategory id='1'>
<category_id>7</category_id>
<code>ACTIO</code>
<name>Action</name>
</subcategory>
e, em seguida, ele mostrou o conteúdo de algum elemento interno, neste caso:
<category_id>7</category_id>
<code>ACTIO</code>
<name>Action</name>
No IE8, o primeiro alerta trabalhou OK (alertado 7) mas o próximo alerta (alert (cat.get ( 'html'));) deu uma cadeia vazia eo último emitiu uma exceção ... ele disse algo sobre subcategoria beeing nulo.
O que eu concluído com tudo isso é que os elementos onde analisado corretamente no Firefox, mas no IE8 Eu só tenho as marcas e os atributos OK, todo o resto estava completamente errado (na verdade, em falta). Quer dizer, o conteúdo interno de todos elementos da resposta onde foi!
Outro fato que você poderia usar: este código:
alert(cat.get('tag')); resulted in
Firefox: category
IE8: /category <-----------(?)
hmm o que mais ...
oh sim ... a linha que você vê comentado acima (cat = $(cat);
) foi
alguma coisa
Tentei fazer para corrigir isso. Eu li nos Docs MooTools que o IE necessário
explicitamente chamada
a função $
em elementos para obter todo o elemento-magic ... mas isso
não corrigir alguma coisa.
Eu estava tão desesperada ... Eu até brincava ao redor com código mootools.js
OK, então ... O que eu quero que você, querido mootool-pro é para me ajudar a resolver este problema, pois eu realmente precisa da web para a função no IE8, e na verdade eu escolhi mootools para esquecer os problemas de compatibilidade ...
ps: se algo não está claro, por favor, pergunte! Eu apreciaria qualquer ajuda: D
Solução
Eu tive um problema semelhante como este há algum tempo atrás usando jQuery. O problema é que, no IE, os dados de resposta de entrada necessário para ser manuseado pelo ActiveX objecto Microsoft.XMLDOM
.
Os passos gerais são:
-
instanciar o objeto ActiveX.
var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
-
passe-os dados de resposta de entrada e carregá-lo.
oXmlDoc.loadXML(sXmlResponseData);
-
analisá-lo conforme necessário.
Você pode conferir a resolução completa aqui .