JavaScript(三十六)js跨域方法

一、跨域概述

JS跨域是指通过js在不同的域之间进行数据传输或通信,如Ajax向一个不同的域请求数据,或者通过JS获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,即为不同的域;

网址是  http://baidu.com:8080?user=name&pwd=password
http:        协议
baidu.com    域名  (注意:www.baidu.com不是域名)
8080         端口
user=name&pwd=password 地址带的参数

注意:在Js中直接使用XMLHttpRequest(Ajax)请求不同域上的数据,是不能实现的

举例:相对http://store.company.com/dir/page.html同源检测的结果:

二、Jsonp跨域 

在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。

比如,有个a.html页面,它里面的代码需要利用ajax获取一个不同域上的json数据,假设这个json数据地址是http://example.com/data.php,那么a.html中的代码就可以这样:

跨域原理:

这里的json数据是被当做js文件通过script标签引入的,(http://example.com/data.php返回的必须是一个能执行的js文件) ,这个js文件载入成功后会执行url参数中指定的gaindata函数,并且会将json数据作为参数传入函数中。 

PHP代码:

 通过jsonp跨域原理,可以用js动态生成script标签进行跨域操作。若页面使用jquery,那么通过其封装的方法很方便的进行jsonp操作。

<script>
$.getJSON('http://example.com/data.php?callback=?',function(jsondata){
        //处理获得的json数据

    })
</script>

原理一样,只是jquery会自动生成一个全局函数替换callback=?中的问号,之后获取到的数据又会自动销毁,即是一个临时函数的作用。$getJSON方法会自动判断是否跨域,不跨域,就调用普通的ajax方法,跨域,则会以异步加载js文件的形式来调用jsonp的回调函数。

三、CORS跨域

跨域原理:

CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。CORS原理只需要向响应头header中注入Access-Control-Allow-Origin:*(*指任意域),页面进行正常的ajax请求即可,这样浏览器检测到header中的Access-Control-Allow-Origin,则就可以跨域操作了。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值