当前位置:首页 > 开发 > 编程语言 > Json > 正文

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

发表于: 2012-07-09   作者:asialee   来源:转载   浏览次数:
摘要: 要解决的问题: 由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com 的服务器沟通,而 HTML 的 <script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不
要解决的问题:
由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com 的服务器沟通,而 HTML 的 <script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的 JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

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

Jsonp原理:

首先在客户端注册一个callback, 然后把callback的名字传给服务器。

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

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

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



代码:

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

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

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


同源策略好处:

1. 保护客户的数据的隐私数据,比如cookie等信息,重点预防,比如baidu.com的程序就不能访问google.com域下的私有数据,否则,你的gmail就有可能被攻破了。
2. 保护服务器端的资源,一个比如baidua.com不能直接嵌套baidu.com的内容

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
作者:zccst 2015-04-30 更新 跨域实现的两种方式 一、通过src="http://romateServer.com/api?callba
开发环境说明: win7 vs2012 coco2d-x 3.0 alpha1 cocos2d-x 3.0 alpha 1搭配CocoStudio使用,效果
(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。) 题记:由于在A
JSONP使用研究 Part One: 什么是JSONP   JSONP是一个非官方的协议,它允许在服务器端集成Script t
在项目中遇到一个jsonp跨域的问题,于是仔细的研究了一番jsonp跨域的原理。搞明白了一些以前不是很
6 jsonp
一、JavaScript 远程web Target.ashx public class Target : IHttpHandler { public void ProcessRe
function handleResponse(response) { alert("You’re at IP address " + response.ip + ", which i
8 jsonp
转自:http://www.cnblogs.com/lemontea/archive/2012/12/11/2812268.html jsonp详解 json相信大家
效果展示 点击右下角的btn 在同一个activity里切换到另一个界面 具体实现: 主要java代码 public cl
1、spring概述 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号