JSONP是JSON with Padding的略称。
它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)
返回一段js代码
var
flightHandler =
function
(data){ alert('你查询的航班结果是:票价 '
+ data.price +
' 元,'
+
'余票 '
+ data.tickets +
' 张。'); };
// 提供jsonp服务的URL地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)
url =
"http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=flightHandler";
url中传递了一个code参数,告诉服务器我要查的是CA1998次航班的信息,而callback参数则告诉服务器,我的本地回调函数叫做flightHandler,所以请把查询结果传入这个函数中进行调用。
flightHandler({ "code": "CA1998","price": 1780,"tickets": 5});
利用<script>标签没有跨域限制的“漏洞”来达到与第三方通讯的目的。当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,形如:
<script src="http://www.example.net/api?param1=1¶m2=2"></script>
第三方产生的响应为
json数据的包装(故称之为jsonp,即json padding),
形如:
callback({"name":"hax","gender":"Male"})