操作环境:OS:win7-64bit,brower:chrome
今天在学习jquery的ajax请求时碰到一个问题,当使用jquery中的load()函数访问一个跨站资源(不是相同域名和端口即属于跨站)时,如果直接访问该资源会出现无法加载的情况。
例如有如下代码:
1
2
3
4
5
6
7
14
15
16
First Paragraph
17
18
19
20
http://127.0.0.1/ajaxtest/demo.txt内容为
This is some text in a paragraph.jQuery and AJAX is FUN!!!
此时打开ajax1.html会在js控制台出现如下错误,意思是因为缺少“Access-Control-Allow-Origin”头,无法使用该资源。
XMLHttpRequest cannot load http://127.0.0.1/ajaxtest/demo.txt. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
查询了一下“Access-Control-Allow-Origin”,发现这是HTML5中定义的一个HTML头,表示该资源允许被哪个域引用,其中*可表示所有域。更多的介绍可以看http://yuguo.us/weblog/access-control-allow-origin/ 这篇博文。
在上面的例子中,我使用本机中一个html文件去访问127.0.0.1下的一个txt资源,因为并非同域,又没有“Access-Control-Allow-Origin”头,所以被服务器拒绝得到该资源。解决办法是先访问一个php文件,输出“Access-Control-Allow-Origin”头再返回该文件。
代码修改如下:
Test Paragraph
此外在服务端新建一个文件demo.php
此时便能正常访问了。