以下javascript函数适用于IE,Safari和Firefox。但它在Chrome(33.0。)和Opera(16.0.1196)中失败了。加载时会显示空白HTML页面。
function readTestXMLFile() {
if (window.ActiveXObject) {
var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
xmlDoc.async = 'false';
xmlDoc.load('test.xml');
}
else {
var requ = new XMLHttpRequest();
alert("a");
requ.open("GET", "test.xml", false);
alert("b");
requ.send(null); //This line is not working in chrome and opera
alert("c");
var xmlDoc = requ.responseXML;
alert(xmlDoc);
alert("d");
}
return xmlDoc;
}
只打印'a'和'b'。之后它不会继续下去。如果我使用requ.send()或requ.send(“”)而不是requ.send(null),则会观察到相同的结果。
如果我删除语句requ.send(null),则为xmlDoc打印'null'值。仍然是空白的HTML加载。
请告诉我在Chrome和Opera上使用这项工作的正确方法。
由于
SRB。
答案 0 :(得分:1)
您的错误消息表明您正在尝试访问被视为“Cross origin request”的本地文件,如果您尝试运行本地服务器它应该可以正常工作。
使用相同的问题查看此前提出的问题: 的 Cross origin requests are only supported for HTTP but it's not cross-domain 强>
然后您将访问http://localhost/.../test.xml
而不是c:/localhost/.../test.xml
您还可以为Chrome设置一个标记,以允许本地文件请求本地文件:-allow-file-access-from-files
答案 1 :(得分:0)
对XMLHttpRequest.send方法的调用是异步的,因此您需要稍微修改一下调用。以下修改后的代码将在成功返回响应时打印响应内容:
requ.addEventListener("load", function(e) {
alert(req.responseText);
}, false)
requ.send(null);
<强>更新强> 我没有注意到你使发送请求调用同步。
修改强> 您需要使用此参数启动chrome才能访问本地文件
<强> - 允许文件存取从-文件强>
例如:c:\ Browser \ chrome.exe --allow-file-access-from-files
答案 2 :(得分:0)
我认为问题在于您将 null 传递给send()方法。您正在发出GET请求,因此您应该调用不带参数的send。我认为chrome会因此而抛出异常。只需删除 null
即可