跨域请求—JSONP实现跨域

Jsonp是实现跨域GET请求的最常用的方法,简单有效地实现了不用域之间的数据交换。最常用来解决普通Ajax请求不能跨域访问的情况。

什么是JSONP

Src跨域能力

在HTML页面使用img,script,iframe等有src属性的标签时,从来没有考虑过资源url的跨域问题。

例如:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>

不用下载jquery文件,就可以直接使用jquery代码。

<img src="http://img5.duitang.com/uploads/item/201410/29/20141029141406_vNGSx.thumb.700_0.jpeg" width="128" height="128" />

图片也能够直接加载。

Jsonp

利用script的src跨域能力,将需要跨域请求的数据通过src的url请求到的JS类型文件传递过来,请求的数据仍以我们最常用的JSON数据。

对于数据的处理通过在客户端定义一个callback函数进行数据的处理,并将这个callback函数名作为url参数传递给服务端,服务端将在返回的JS文件中实现调用callback函数,并以JSON数据对象作为callback函数实例的参数,这样在客户端获取到JS文件之后会执行callback函数。

这种获取数据的方式就是JSONP。

JSONP的实现

通过动态生成script,并将callback函数名作为src请求的参数传递给服务端。

var callBack= function(data){
        alert(data);
    };
var script = document.createElement('script');
script.type = "text/javascript";
script.src = "url?callback=callBack";
document.getElementsByTagName('head')[0].appendChild(script);

动态script添加成功之后,服务端收到url请求,接收到参数callback=callBack,就会将要返回的JSON数据作为callBak函数的参数,执行调用callBak。

callBack({/*json data*/})

客户端收到返回的JS文件,执行其中代码,执行callBack({/json data/})实例,由于callBack函数在之前已经定义,因此callBack({/json data/})实例将会执行相应数据处理。就完成了Jsonp的跨域数据请求。

jQuery 实现Jsonp跨域

$.ajax({
         type: "GET",
         url: "url",
         dataType: "jsonp",
         jsonp: "callback",
         success: function(data){
         /*处理数据*/
         },
         error: function(){
         }
});

也可以通过jsonpCallback传递函数名,默认情况下jQuery会自动生成一个随机函数名,并将返回的数据通过success函数来处理。

JSONP实现跨域请求的方式核心是根据script的src跨域能力,而AJAX是通过XmlHttpRequest。两者已有本质上区别,不过JSONP确是实现跨域的有效方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值