Estoy tratando de cargar un archivo xml/xsl local en una variable para editarlo. El siguiente código funciona con IE y Chrome. Pero Chrome da una advertencia ya que esta llamada es síncrona.
function loadXMLDoc (file name){ If (window.ActiveXObject){ xhttp = new ActiveXObject(“Msxml2.XMLHTTP”); } else { xhttp = new XMLHttpRequest(); } xhttp.open(“GET”,filename, false); // false is synchronous xhttp.send(); var xml = xhttp.responseXML; return xml; }Pero si hago que esto se asincronice cambiando esta llamada.
xhttp.open(“GET”,filename, false);a la verdad
xhttp.open(“GET”,filename, true);o llamar por defecto.
xhttp.open(“GET”,filename);No funciona en Chrome y da error en la consola.
el código original funciona en IE pero no funciona en Chrome.
Quiero arreglar esta función o escribir un método diferente que pueda cargar un xml/xsl asíncrono local y obtener xml/xsl en una variable en cromo.
Si desea cargar XML para el procesamiento XSLT, entonces, para atender a IE, si es necesario, creo que puede configurar xhttp.responseType = 'msxml-document' .
En cuanto al procesamiento asíncrono y la "devolución" del documento, considere las promesas, por ejemplo
function loadDoc(url) { return new Promise(function(resolve) { var req = new XMLHttpRequest(); req.open("GET", url); if (typeof XSLTProcessor === 'undefined') { try { req.responseType = 'msxml-document'; } catch (e) {} } req.onload = function() { resolve(this.responseXML) } req.send(); }); } entonces puede hacer, por ejemplo, loadDoc('sample.xml').then(function(doc) { ... }) o para XML y XSLT
Promise.all([loadDoc(xmlUrl), loadDoc(xslUrl)]).then(function(data) { var xmlDoc = data[0]; var xslDoc = data[1];Las promesas no se admiten de forma nativa en IE, pero se pueden agregar mediante un polyfill