Ajax在Chrome中执行本地文件跨域问题
学习前端也开始接触了ajax,因为一直不是很理解,今天看尚硅谷的课程,又学习了一遍,但是还是遇到了跨域问题。
今天练习的是尚硅谷的ajax本地html调用本地txt文件,总体代码如下:
<script type="text/javascript">
// 1 阻止链接的默认行为
window.onload = function(){
document.getElementsByTagName("a")[0].addEventListener("click", function(e){
// 1 创建XMLHttpRequest对象
var request = new XMLHttpRequest();
request.withCredentials = true;
// response.addHeader('Access-Control-Allow-Origin:*');//允许所有来源访问
// response.addHeader('Access-Control-Allow-Method:POST,GET');//允许访问的方式
// 准备发送请求
var url = this.href;
var method = 'GET';
request.onreadystatechange = function(){
alert(request.readyState);
// 判断相应是否完成,这个对象的readystate属性值为4的时候表示响应完成
if(request.readyState == 4){
// 判断响应是否可用,使用对象的state值,如果是200的话,就是成功
console.log(request.status)
if(request.status == 200 || request.status == 0){
//为了调试问题出错
alert("good");
// 正常返回打印响应结果:responseText
alert(request.responseText);
}else{
alert("shibai")
}
}
}
request.open(method, url, true);
// 调用open方法
// 调用send方法
request.send(null);
// 为对象添加onreadystatechange相应函数
alert("444");
e.preventDefault();
})
}
</script>
Chrome无法调试本地ajax
首先因为我一直使用的是Chrome来调试的,而且因为暂时没有接触到tomcat什么的在可以localhost打开我的html文件,所以调试的时候一直出现跨域问题不好解决。
首先在Chrome中是不允许file开头的文件进行跨域的,就是本地文件不能调用,这个问题需要右击谷歌浏览器的图标,选择属性,在其目标里添加–allow-file-access-from-files,和原来的内容之间必须有空格
注意:改完之后打开使用以管理员方式运行,不然还是会出现跨域问题的
点击应用,然后确定即可。
跨域解决后status为0问题
到这里应该是解决了不能本地文件ajax问题,接着又出现了不执行这个代码的问题
if(request.status == 200 || request.status == 200){
alert(request.responseText);}
检查之后发现是因为我当前的html调用这个txt文档,status的结果是0,找了一圈发现这个博主做了解答解决办法
是因为我这边使用ajax的时候是本地文件调用本地文件,没有通过服务器,所以直接本地打开了,所以不存在status的值为200或者304,而需要将其设置为0即可。
综上今天算是解决了我本地调试出现的ajax跨域问题。