jsonP的原理与在项目中的使用

[size=large][b]要解决的问题:[/b][/size]
[size=medium] [color=blue]由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com 的服务器沟通,而 HTML 的 <script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的 JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。[/color][/size]

[size=medium] [color=blue]为了让浏览器可以在 <script> 元素执行,从 src 里 URL 回传的必须是可执行的 JavaScript。在 JSONP 的使用模式里,该 URL 回传的是由函数呼叫包起来的动态生成 JSON,这就是JSONP 的“填充(padding)”或是“前辍(prefix)”的由来。[/color][/size]

[size=large][b]Jsonp原理:
[/b][/size]
[size=medium][color=blue]首先在客户端注册一个callback, 然后把callback的名字传给服务器。

此时,服务器先生成 json 数据。
然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.

最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。

客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)[/color][/size]


[size=large][b]代码:[/b][/size]

[size=medium][color=blue] 比如客户想访问[/color][/size]
[url]http://www.yiwuku.com/myService.aspx?jsonp=callbackFunction[/url]
  [size=medium][color=blue]假设客户期望返回JSON数据:[/color][/size]
["customername1","customername2"]

  [size=medium][color=blue]那么真正返回到客户端的Script Tags: [/color][/size]
callbackFunction([“customername1","customername2"])

  [size=medium][color=blue]可能的调用方式:[/color][/size]
 
 <script type="text/javascript" src="http://www.yiwuku.com/myService.aspx?jsonp=callbackFunction" />


[size=large][b]同源策略好处:[/b][/size]
[size=medium][color=blue]
1. 保护客户的数据的隐私数据,比如cookie等信息,重点预防,比如baidu.com的程序就不能访问google.com域下的私有数据,否则,你的gmail就有可能被攻破了。
2. 保护服务器端的资源,一个比如baidua.com不能直接嵌套baidu.com的内容

[/color][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值