在chrome浏览器中异步加载本地xml文件



我正在尝试将本地xml/xml文件加载到变量中进行编辑。以下代码适用于IE和chrome。但是chrome会发出警告,因为此调用是同步的。

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;  
}

但是如果我通过更改这个调用来实现异步。

xhttp.open(“GET”,filename, false);

至真正的

xhttp.open(“GET”,filename, true);

或调用default。

xhttp.open(“GET”,filename);

它在chrome中不起作用,并且在控制台中出现错误。

原始代码可以在IE中工作,但不能在chrome中工作。

我想修复这个函数,或者写一个不同的方法,它可以异步加载本地xml/xl,并将xml/xl获取到铬中的变量。

如果您想加载XML进行XSLT处理,那么为了满足IE的需要,如果需要的话,我认为您可以设置xhttp.responseType = 'msxml-document'

至于异步处理;返回";文件,考虑承诺,例如

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();
});
}

然后您可以执行例如loadDoc('sample.xml').then(function(doc) { ... })或同时针对XML和XSLT

Promise.all([loadDoc(xmlUrl), loadDoc(xslUrl)]).then(function(data) {
var xmlDoc = data[0];
var xslDoc = data[1];

承诺在IE中本机不支持,但可以通过polyfill 添加

最新更新