json 是一种数据格式
jsonp 是一种数据调用的方式。html
你能够简单的理解为 带callback的json就是jsonp前端
话说咱们访问一个页面的时候 须要像另外一个网站获取部分信息, 这就是所谓的跨域请求才能完成的功能, 好比引入外部js, img 等等, 说到发送请求, 在web2.0的时代 咱们避免不了 ajax 请求了, 固然咱们在web
工做中用到 ajax 跨域请求 是必须遇到的,固然ajax 是不支持跨域请求的 但jsonp能够解决这个问题, 下面咱们就来分析一下在这个东西是怎么工做的额 。ajax
说道JSONP,很简单,就是利用<script>标签没有跨域限制的特色来达到与第三方通信的目的。当须要通信时,本站脚本建立一个<script>元素,地址指向第三方的API网址,形如:
<script src="http://www.example.net/api?param1=1¶m2=2"></script>
并提供一个回调函数来接收数据(函数名可约定,或经过地址参数传递)。
第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})
这样浏览器会调用callback函数,并传递解析后json对象做为参数。本站脚本可在callback函数里处理所传入的数据。 json
可能多数人对它的知晓程度仅限于jQuery,jQuery提供了发送jsonp请求的方法。好比在使用$.ajax()方法的时候后端
jQuery(document).ready(function(){ $.ajax({ url: "http://域名/ajax/test", dataType: "jsonp", jsonp: "callback", success: function(json){ // alert(json); }, error: function(){ } }); });
jQuery将jsonp请求封装成相似ajax请求的样子,这样能让开发者在使用的时候更加方便,可是实际上,jsonp压根不是经过XMLHttpRequest来实现的。api
下面的代码你就知道jsonp的如何实现的了跨域
var callbackName = 'callback';
window[callbackName] = function (data) { alert(data); // 对返回的数据作后续处理 }
var script = document.createElement('script'); script.src = 'http://hf-test.haoju.cn/esf/ajax/test?callback='+callbackName; document.body.appendChild(script);
这是前端部分的代码,要想真正实现JSONP的功能,还须要后端的配合。针对上面这个例子,当前端请求这个script地址的时候,后端只要按如下内容响应就会有神奇的效果:浏览器
echo callback('my is jsonp');
实际上,jQuery发JSONP请求时也是这么作的。app
下面是Jason跟JasonP的项目实战链接:
http://www.qixing318.com/article/simply-describe-the-difference-between-json-with-json-as-well-as-the-actual-combat.html