我搜索过并搜索过,找不到解决方法: 我正在尝试使用Ajax加载.txt文件内容,但文件返回空。 我检查了准备状态和状态。就绪状态为4表示已设置连接,接收数据,状态为0表示加载http时出错,但我在论坛上读到可以使用本地文件。 我真的不知道该怎么办。 所有帮助将不胜感激! 这是我的代码:
<script>
function load() {
var selectedValue = document.getElementById("mySelect").value;
var xhttp;
alert("in func")
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
try{
xhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){
}
}
}
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && (xhttp.status == 200 || xhttp.status == 0)) {
document.getElementById("textDiv").innerHTML = xhttp.responseText;
alert(xhttp.responseText);
}
};
if(selectedValue == "Year 1"){
xhttp.open("GET", "file://year1.txt", true);
xhttp.send(null);
}
if(selectedValue == "Year 2"){
xhttp.open("GET", "year2.txt", true);
xhttp.send(null);
}
if(selectedValue == "Year 3"){
xhttp.open("GET", "year3.txt", true);
xhttp.send(null);
}
}
</script>
答案 0 :(得分:0)
问题很可能是文件协议:file://year1.txt
尝试使用相对路径,即./year1.txt
修改.. 强>
我第一次错过了这个...你会在成功的通话中获得几次点击回调功能。您将获得一个状态为零的地方,然后如果成功,您将获得另一个具有200的地方。为什么要检查两者?
改变这个......
if (xhttp.readyState == 4 && (xhttp.status==200 || xhttp.status==0))
到此......
if (xhttp.readyState == 4 && xhttp.status==200)
答案 1 :(得分:0)
OK!在进行大量研究之后,问题是臭名昭着的跨域请求问题(不允许访问本地文件作为安全措施的一部分,以确保您不上传受感染的文件&amp; ct) 解决方案是:
初始化XMLHttpRequest的变量时写:
xhttp = new XMLHttpRequest({mozSystem: true});
(注意请求中的{mozSystem:true})
它解决了问题! 谢谢你的时间,我希望这有助于某人:)
答案 2 :(得分:0)
我之前的回答有效但不是很久 - 在我重新启动计算机后,ajax停止工作,开始再次抛出交叉原点错误。所以我发现的最佳选项也适用于我检查过的所有浏览器(chrome,IE),就是设置本地服务器并从那里运行它。
这是一个指示链接: https://www.maketecheasier.com/setup-local-web-server-all-platforms/
祝你好运!