浅析JSONP

  随着Web2.0的兴起ajax应用有了广泛的发展,ajax的广泛应用使得Web页面交互更加友好,他使得页面在不刷新的情况下发送请求并处理页面信息。但是,ajax受限于浏览器安全模型中的同源策略,导致不能与其他域名服务器相互通信。这时一个非官方的协议被提出来了:JSONP。

  同源策略:同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性。也就是说,受到请求的 URL 的域必须与当前 Web 页面的域相同。这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作。

  JSON:JSON 是用于在浏览器和服务器之间交换信息的轻量级数据格式

  JSONP:全名为JSON Width Padding,字面意思带有填充功能的JSON。

  JSONP的原理:他是通过想页面注入<script>标签的方式来进行,其src属性格式与通常意义上的有一些差别,多了一个回调函数这样的参数。写法如下所示:  

http://www.test.com/jsonp/excJSONP?callback=funDealJSON

  其中标红的部分就是回调函数,而 "excJSONP" 可以理解为一个服务器。此时浏览器上已经写好了名为funDealJSON的函数了,例如:

<html>
<script>
//处理返回的JSON数据
function funDealJSON(jsonData){
alert(jsonData.para);
}
</script>
</html
>

 

  通常意义上 "excJSONP" 服务可能返回的就是一个简单的JSON数据,例如,{para:test}

  然而JSONP会把回调函数部分与JSON数据包装一起后返回,这样返回的就是一条可执行的JavaScript语句,返回结果类似:funDealJSON({para:test})

  这样当浏览器执行到这个script标签时就会去执行里面的数据,而此时的数据 就是一条可执行的JavaScript语句,那么此时就执行了callback函数。一次JSONP请求就完成了。

 

  JSONP虽然解决了同源策略的限制,但同时也带来了安全隐患,因为浏览器在执行返回结果是并不会去检查代码。

posted @ 2012-03-29 14:39  小爱博客  阅读(264)  评论(0编辑  收藏  举报