跨域请求—JSONP实现跨域
来源:互联网 发布:过滤视频广告的软件 编辑:程序博客网 时间:2024/05/08 21:37
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确是实现跨域的有效方法。
- jsonp实现跨域请求
- jsonp实现跨域请求
- jsonp跨域请求
- jsonp 跨域请求
- jsonp跨域请求
- jsonp跨域请求
- jsonp跨域请求
- jsonp跨域请求
- JSONP 跨域请求
- jsonp跨域请求
- jsonp跨域请求
- JSONP跨域请求
- JsonP跨域请求
- jsonp跨域请求
- 跨域请求jsonp
- jsonp跨域请求
- JsonP跨域请求
- 跨域请求jsonp
- 使用ijkplayer进行视频播放
- spring-guide之consuming-rest
- Android之androidmainfest.xml配置文件详解
- Unable to read TLD "META-INF/c.tld" from JAR file
- ionic2 - zero to one
- 跨域请求—JSONP实现跨域
- Python day14 logger复习
- Linux文件的普通权限详解
- 使用libCurl实现断点下载
- 大小端模式解析(联合体union)
- 安卓学习笔记---Android 开发技巧-以友盟为例在Android Studio利用gradle进行多渠道打包和apk签名发布
- 牛客网-暗黑字符串
- centos下安装nmon监控
- (第四周项目5)猴子选大王