Cómo recibir XML en IE8 con mootools
-
05-07-2019 - |
Pregunta
Estoy haciendo una web donde uso mucho las solicitudes de AJAX para Un servicio XML. De hecho, mi web es un front-end con casi no tiene servidor alguno y utiliza AJAX para comunicarse con el back-end.
Todo iba bien (desarrollé y probé en Ubuntu 9.04 y Firefox 3.0 como navegador). Un día decidí ver cómo funcionaba mi web en IE8 ... horror!
Nada funcionaba tan maravillosamente como en Firefox. Para ser más específicos, los Request.HTML no funcionaban. Como dije, mi web dependía mucho de eso, así que nada funcionó.
Pasé un día tratando de hacer funcionar algo, pero no tuve suerte ... La única conclusión a la que llegué fue que el XML era analizado incorrectamente (Espero estar en error). Vayamos al 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 ejemplo, ese fragmento de código. En Firefox, funcionó perfectamente. Alertó una identificación (por ejemplo, 7), luego mostró el contenido del elemento de categoría, por ejemplo:
<subcategory id='1'>
<category_id>7</category_id>
<code>ACTIO</code>
<name>Action</name>
</subcategory>
y luego mostró el contenido de algún elemento interno, en este caso:
<category_id>7</category_id>
<code>ACTIO</code>
<name>Action</name>
En IE8, la primera alerta funcionó bien (alerta 7) pero la siguiente alerta (alert (cat.get ('html'));) dio una cadena vacía y el último lanzó una excepción ... decía algo sobre la subcategoría siendo nulo.
Lo que concluí con todo esto es que los elementos se analizaron correctamente en Firefox, pero en IE8 solo obtuve las etiquetas y los atributos OK, todo lo demas estaba completamente equivocado (de hecho, desaparecido). Quiero decir, el contenido interno de todos elementos de la respuesta donde se fueron!
Otro hecho que podría usar: este código:
alert(cat.get('tag')); resulted in
Firefox: category
IE8: /category <-----------(?)
hmm qué más ...
oh sí ... la línea que ves comentada anteriormente ( cat = $ (cat);
) era
alguna cosa
Traté de hacer para arreglar esto. Leí en los documentos de mootools que IE necesitaba
llamar explícitamente
la función $
en elementos para obtener toda la Magia de elemento ... pero esto
no solucionó nada.
Estaba tan desesperado ... incluso jugueteé con mootools.js
code
OK, entonces ... Lo que quiero, queridos mootool-pro es ayudarme a resolver este problema, para REALMENTE necesito que la web funcione en IE8, y de hecho elegí mootools para olvidarse de los problemas de compatibilidad ...
ps: si algo no está claro, por favor PREGUNTE! Agradecería cualquier ayuda: D
Solución
Hace algún tiempo tuve un problema similar como este usando jQuery. El problema era que, en IE, los datos de respuesta entrantes debían ser manejados por el objeto ActiveX Microsoft.XMLDOM
.
Los pasos generales son:
-
Crea una instancia del objeto ActiveX.
var oXmlDoc = new ActiveXObject (" Microsoft.XMLDOM ");
-
Pásale los datos de respuesta entrantes y cárgalos.
oXmlDoc.loadXML(sXmlResponseData);
-
Analícelo según sea necesario.
Puede consultar la resolución completa aquí .