json是一种数据格式。
jsonp 是一种传递数据的方式。
简单来说 带有 callback 的json 就是jsonp。
关于原理,看了many资料稍稍总结下。
利用 script 标签没有跨域限制,当需要调用第三方数据的时候,src属性指向第三方地址带有参数,并提供一个回调函数来接受数据,来传递给服务端,第三方产生响应(服务端返回数据)时将该回调函数作为函数名来包裹json 数据(json padding),浏览器调用回调函数,并解析后 json 对象作为参数
Jsonp的执行过程如下: 首先在客户端注册一个callback (如:’jsoncallback’),
然后把callback的名字(如:jsonp1236827957501)传给服务器。注意:服务端得到 callback的数值后,要用jsonp1236827957501(……)把将要输出的json内容包括起来,此时,服务器生成
json 数据才能被客户端正确 接收。然后以 javascript 语法的方式,生成一个function, function 名字就是传递上来的参数
‘jsoncallback’的值 jsonp1236827957501 . 最后将 json 数据直接以入参的方式,放置到
function 中,这样就生成了一段 js 语法的文档,返回给客户端。客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时javascript文档数据,作为参数,
传入到了客户端预先定义好的callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里。
可以说jsonp的方式原理上和