什么是JS跨域访问

JavaScript015

什么是JS跨域访问,第1张

ajax或者iframe指向的地址中,二级域名、端口、协议必须与主页面完全相同,否则就算跨域

比如

a.baidu.com访问b.baidu.com 是跨域;

a.baidu.com:8080访问a.baidu.com:80 是跨域;

http://a.baidu.com访问https://a.baidu.com 是跨域

ajax跨域,两种办法:后端写个代理接口,让后端去抓数据;或者与对方合作,用jsonp等方式传送数据

iframe跨域问题有点多,必须要得到iframe内部页面的配合才可能通信,方法也比较多:

1,假写hash值通信,父子页面各自建立轮询去检测iframe中url的hash值,通过值来通信

2,利用HTML5的postMessage,不过注意这个也是异步的

3,利用IE6\7中对navigator的bug,我前同事发现的,在ie6/7中,父子页面使用的window.navigator是同一个东西,父页面改了,子页面也会跟着变;

4,iframe中嵌套一层与顶层页面同域的页面,比如a中套b,b中套c,其中a、c同域,b做出改变后通过url给c传值,c中操作top对象也就是a,由于同域,所以不会有问题

一、原生JS实现ajax第一步获得XMLHttpRequest对象第二步:设置状态监听函数第三步:open一个连接,true是异步请求第四部:send一个请求,可以发送一个对象和字符串,不需要传递数据发送null第五步:在监听函数中,判断readyState=4&&status=200表示请求成功第六步:使用responseText、responseXML接受响应数据,并使用原生JS操作DOM进行显示var ajax = new XMLHttpRequest()ajax.onreadystatechange = function(){ console.log(ajax.readyState)console.log(ajax.status)if(ajax.readyState==4 &&ajax.status==200){ console.log(ajax.responseText) console.log(ajax.responseXML)//返回不是XML,显示null console.log(JSON.parse(ajax.responseText)) console.log(eval("("+ajax.responseText+")")) }}ajax.open("GET","h51701.json",true)ajax.send(null)二、ajax的跨域请求[跨域请求处理]由于在JS中存在同源策略。当请求不同协议名,不同端口号,不同主机名下面的文件时,将会违背同源策略,无法请求成功!需要进行跨域处理!1、后台PHP进行设置:前台无需任何设置,在后台被请求的PHP文件中,写入一条header。header("Access-Control-Allow-Origin:*")//表示允许