注意:Firefox 3.5、Chrome 3.0、Safari 4之后的版本使用XMLHttpRequest没问题。
IE7+浏览器已经开始支持XMLHttpRequest对象,当使用XMLHttpRequest请求不同源的文件(不同域名的页面),和浏览器是否启用安全-》internet区域的“通过域访问数据源”有关系。
- 如果启用了此选项,那么所有跨域的页面都可以访问,即使跨域的页面没有设置过Access-Control-Allow-Origin响应头。
- 如果禁用了“通过域访问数据源”,跨域页面设置过Access-Control-Allow-Origin响应头为*,也无法请求,open时就报错。
注意:如果双击运行或者拖拽进入IE浏览器,XMLHttpRequest对象无法请求本地资源,会出现“拒绝访问”错误,activexobject创建的对象则没有限制,具体参考:网站未发布,ajax能请求的本地资源有哪些。
<script>
/*var xdr=new XMLHttpRequest();
//xdr.open("get", '11.txt', true); //本地测试访问本地资源,出现拒绝访问错误
xdr.open("post", 'http://www.coding123.net/json.asp', true); //如果禁用了“通过域访问数据源”,跨域页面设置过Access-Control-Allow-Origin响应头为*,也无法请求,open时就报错。
xdr.onreadystatechange = function () {
if (xdr.readyState == 4) alert(xdr.responseText)
}
xdr.send(null)*/
</script>
如果未启用安全-》internet区域的“通过域访问数据源”,跨域页面设置过Access-Control-Allow-Origin响应头为*允许所有不同源的页面请求,IE要如何请求此类页面得到跨域页面的内容?可以使用IE专有的XDomainRequest对象。
<script>
var xdr = new XDomainRequest();
//注意XDomainRequest对象本地浏览(双击或者拖拽)无法请求跨域页面,要不报“拒绝访问。”,
//需要发布网站,并且跨域请求仅支持http:// 和https:// 2种协议。
//跨域的页面要设置过Access-Control-Allow-Origin响应头为*,要不没有反应,也不会报错。
xdr.open("post", 'http://www.coding123.net/json.asp');
xdr.onload = function () {
alert(xdr.responseText)
}
xdr.send(null);
</script>