我正在尝试将本地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 添加