JSONP(JSON with Padding)是数据格式JSON的一种“使用模式”,可以让网页从别的网域要数据。另一个解决这个问题的新方法是跨来源资源共享。
@H_502_7@由于同源策略,一般来说位于server1.example.com的网页无法与 server2.example.com的服务器沟通,而HTML的<script>
元素是一个例外。利用<script>元素的这个开放策略,网页可以得到从其他来源动态产生的JSON数据,而这种使用模式就是所谓的 JSONP。用JSONP抓到的数据并不是JSON,而是任意的JavaScript,用 JavaScript解释器运行而不是用JSON解析器解析。
@H_502_7@
目录
[隐藏]原理[编辑]
@H_502_7@为了理解这种模式的原理,先想像有一个回传JSON文件的URL,而JavaScript 程序可以用XMLHttpRequest跟这个URL要数据。假设我们的URL是 http://server2.example.com/RetrieveUser?UserId=xxx 。假设小明的UserId 是1823,且当浏览器通过URL传小明的UserId,也就是抓取http://server2.example.com/RetrieveUser?UserId=1823,得到: {"Name": "小明", "Id" : 1823,33);">"Rank"7}
<script type="text/javascript"
src"http://server2.example.com/RetrieveUser?UserId=1823&jsonp=parseResponse">
</script>
@H_502_7@服务器会在传给浏览器前将JSON数据填充到回调函数(parseResponse)中。浏览器得到的回应已不是单纯的数据叙述而是一个脚本。在本例中,浏览器得到的是:
parseResponse({7})