jsonp跨域请求
2016-10-11 16:06
316 查看
Ajax是不能跨域的,但是利用jsonp是可以实现跨域的,博主今天记录一篇jsonp跨域的实例。
jsonp简介:
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的
通俗的说,就是利用
以百度智能搜索提示Api为例:
http://suggestion.baidu.com/su?wd=歙县&cb=callBack, 来看看返回值:
![](http://img.blog.csdn.net/20161011155319161)
不难看出其返回值是由callBack(json格式数据)组成的,我来以此做一个小的案例。
案例:
还是以百度搜索智能提示Api为例,先上结果图吧。
![](http://img.blog.csdn.net/20161011160034039)
本案例只有一个文件,07-jsonp.html代码:
页面中主要有一个文本框和一个按钮,点击按钮,响应sear函数,然后获取文本框中的值,拼接url,创建script标签并添加到dom树中,然后请求此URL,然后此script标签中的内容就是返回的jsonp格式的值,因为jsonp格式的特殊性,需要调用callBack函数,然后在回调函数中使用json数据。
jsonp简介:
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的
<script>元素是一个例外。利用
<script>元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。——百度百科
通俗的说,就是利用
<script>的特殊性去请求服务器,服务器返回josnp格式数据,jsonp数据格式:
function( json ),换句话说,就是把json数据包装在一个函数参数中返回,然后调用本地js中的function函数,操作json数据。
以百度智能搜索提示Api为例:
http://suggestion.baidu.com/su?wd=歙县&cb=callBack, 来看看返回值:
不难看出其返回值是由callBack(json格式数据)组成的,我来以此做一个小的案例。
案例:
还是以百度搜索智能提示Api为例,先上结果图吧。
本案例只有一个文件,07-jsonp.html代码:
页面中主要有一个文本框和一个按钮,点击按钮,响应sear函数,然后获取文本框中的值,拼接url,创建script标签并添加到dom树中,然后请求此URL,然后此script标签中的内容就是返回的jsonp格式的值,因为jsonp格式的特殊性,需要调用callBack函数,然后在回调函数中使用json数据。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Jsonp跨域请求</title> <link rel="stylesheet" href=""> </head> <script> //搜索函数 function sear(){ var kw = document.getElementsByName('keywords')[0].value; var url = 'http://suggestion.baidu.com/su?wd='+ kw +'&cb=callBack'; //创建script标签 var script = document.createElement('script'); script.src = url; document.getElementsByTagName('head')[0].appendChild(script); } //回调函数 function callBack(res){ var result = res.s; var str = ''; for(var i in result){ str += '<li>'+result[i]+'</li>'; } document.getElementById('res').innerHTML = str;//把显示出来 } </script> <body> <p>关键字:<input type="text" name="keywords"/></p> <p><input type="button" value="提交" onclick="sear();" /></p> <div id="res"> </div> </body> </html>
相关文章推荐
- AJAX 跨域请求 - JSONP获取JSON数据
- AJAX 跨域请求 – JSONP的使用,PHP实例详解
- ajax跨域请求--jsonp实例
- jquery跨域请求jsonp
- zepto-ajax跨域请求接口 jsonp 静态页面数据展示
- 说说JSON和JSONP,跨域请求
- jsonp跨域请求
- 跨域请求jsonp详解
- jquery+ajax+jsonp实现跨域请求
- 同源策略和Jsonp跨域请求解析
- AJAX 跨域请求 - JSONP获取JSON数据
- 跨域请求之jQuery的ajax jsonp的使用解惑
- js跨域请求方式 ---- JSONP原理解析
- JSONP跨域请求数据报错 “Unexpected token :”的解决办法
- 跨域请求解决方法(JSONP, CORS)
- JSON和JSONP有哪些区别,PhoneGap跨域请求如何实现,什么是JSON,JSON的优点, JSON的格式或者叫规则。
- JsonP跨域请求
- jsonp跨域请求只能get变相解决方案
- TamperMonkey脚本跨域请求与JSONP
- 跨域请求之二:jsonp详解