IE浏览器SCRIPT5拒绝访问,谷歌浏览器XMLHttpRequest can't load file:/......
一.背景
在测试ajax时,写了一个ajax.html,目的是访问example.txt中的文本,写好后,右键该html选择在浏览器中打开,浏览器页面上无内容.调出调试窗口:
IE浏览器:SCRIPT5 拒绝访问
谷歌浏览器:XMLHttpRequest can't load file:/......
二.原因
在使用ajax时,千万要注意同源策略.使用XMLHTTPRequest对象发送的请求只能访问与其所在的HTML处于同一个域中的数据(注意不是指同一个文件夹!!!),不能向其他域发送请求.此外有些浏览器还会限制ajax请求使用的协议.比如在Chrome中,如果你使用file://协议从自己的硬盘里加载example.txt文件,就会看到"Cross origin requests are only supported for HTTP"(跨域请求只支持HTTP)的错误信息.
三.解决方案
发布该项目,按正常访问页面的方式即可.详细如下:
将该工程添加到Tomcat中,启动Tomcat服务器,打开浏览器在地址栏中输入:localhost:8080/JavaScript/html/ajax.html 打回车.(这是最简单的方式,网上还有其他解决方案,不再赘述)
四.代码及附图
项目结构图:
ajax.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="UTF-8">
5 <title>Insert title here</title>
6 </head>
7 <body>
8 <div id="new"></div>
9 <script src="../js/addLoadEvent.js" type="text/javascript"></script>
10 <script src="../js/getHTTPObject.js" type="text/javascript"></script>
11 <script src="../js/getNewContent.js" type="text/javascript"></script>
12 </body>
13 </html>
addLoadEvent.js
1 /**
2 * 共享onload
3 * @param func
4 */
5 function addLoadEvent(func){
6 var oldonload = window.onload;
7 if (typeof window.onload != 'function') {
8 window.onload = func;
9 } else {
10 window.onload = function(){
11 oldonload();
12 func();
13 }
14 }
15 }
getHTTPObject.js
1 /**
2 * 获取XMLHttpRequest对象
3 */
4 function getHTTPObject(){
5 if (typeof XMLHttpRequest == "undefined") {
6 XMLHttpRequest = function(){
7 try {
8 return new ActiveXObject("Msxml2.XMLHTTP.6.0");
9 } catch (e) {
10 // TODO: handle exception
11 }
12 try {
13 return new ActiveXObject("Msxml2.XMLHTTP.3.0");
14 } catch (e) {
15 // TODO: handle exception
16 }
17 try {
18 return new ActiveXObject("Msxml2.XMLHTTP");
19 } catch (e) {
20 // TODO: handle exception
21 }
22 return false;
23 }
24 }
25 return new XMLHttpRequest();
26 }
getNewContent.js
1 /**
2 * ajax
3 */
4 function getNewContent(){
5 var request = getHTTPObject();
6 if(request){
7 request.open("GET","example.txt",true);
8 request.onreadystatechange = function(){
9 if (request.readyState == 4) {
10 var para=document.createElement("p");
11 var txt=document.createTextNode(request.responseText);// 从responseText属性里取得文本数据
12 para.appendChild(txt);// 把文本数据放到一个段落中
13 document.getElementById("new").appendChild(para);// 将该段落添加到DOM里
14 }
15 };
16 request.send(null);
17 } else {
18 alert('Sorry, your Browser dosen\'t support XMLHttpRequest ');
19 }
20 }
21
22 addLoadEvent(getNewContent);
exmaple.txt
1 This was loaded asynchronously!
正常访问页面:
作者:习惯沉淀
如果文中有误或对本文有不同的见解,欢迎在评论区留言。
如果觉得文章对你有帮助,请点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
扫码关注一线码农的学习见闻与思考。
回复"大数据","微服务","架构师","面试总结",获取更多学习资源!