json与jsonp的区别与联系


 要谈清楚这个问题,我们需要从http协议访问说起. 网页程序访问是一种B/S架构,也就是每次用户需要获取新的内容,

就需要通过浏览器(B,browser)向服务器发出一条请求,然后服务器(S,server)向浏览器返回数据,

这个过程成为request - response(请求 -响应)。 上述的请求过程,其实就是一个数据传输的过程,

将前台的数据传输到后台,再从后台将数据传输到前台。而在前后台,数据以各自的语言语法的数据结构形式进行组织,

比如js的字符串,数组,对象,后端php程序的字符串,数组,对象。 要将前端中js的数据传输到后台php,

是不能直接以原有结构传输,只能以ascii码传输(也就是a,b,c,d.....),所以所有的非ascii码数据都必须转为ascii码,

比如要传递一个数组给php,必须将数组按照特定的规范转为字符串,传到php后,再经过反逆处理,还原为数组。

这种数据转换过程称为编码与解码。在以前,前后台交互通常借助于xml来传输,但这种格式传输效率低,占用网络流量资源,

所以后来就出现了json格式。 json格式与xml不同,不需要做很多的tag封装,只需要像写js对象一样书写,

所以传输效率极高:{"name":"平哥","job":"teacher"},

这就是json字符串,json字符串与js对象相比只是在键名上多了一对引号,

这种格式就称为json格式。json格式被各种后台语言支持,所以具有良好的通用性,而在前端,js可以直接将json字符串作为对象进行操作,

非常方便。json的上述优点,使得现在前后台交互中普遍选择json作为数据交换格式。所以要牢记:json是一种数据格式,

使用这种格式组成的字符串成为json字符串或者json串 那么什么又是jsonp呢,它与json之间又有什么联系呢?

我们还是从请求-响应模式说起,用户每次请求新的内容,需要向后台发一条请求,在互联网刚开始的时候,

即使你只想获取网页某一处的内容更新,也要向后台请求一个新的完整网页,即使这个网页只有一小处变化,

这就浪费了很大的资源,因为你只需要更新一小块内容,却要反复请求相似的内容。所以,人们就想了一些解决办法,

使用iframe,动态js请求,xhr(ajax)。这些解决办法各有优逆。 jsonp是动态js请求方案,

具体的实现如下:

通过在页面创建一个javascript的标签 script = document.createElement("script") 设置script的srcscript.src = "后台地址" 这样如果打开网页调试工具,

在网络请求中就可以看到产生了一条请求 当然这样还不是jsonpjsonp是在这个基础上改进的。

首先在页面上定义一个js函数:

function show(jsonString){

.....使用jsonString做点事,jsonString是json串

}

向后台传输的的参数中增加一个参数,

假设参数名是callbacksrcipt.src = "后台接口地址?callback=show"这意思就是告诉后台,我这个有一个函数是show,

后台执行完后,需要通知前台执行一下这个函数 后台接收到callback后,

就会将执行结果的数据转换称json串,

使用传入的回调函数名封装起来以php为例user = array('name'=>'luxp','job'=>'teacher');user_jsonstr = json_encode(user); //user_jonstr变成{'name':'luxp','job':'teacher'}

最后,将数据与回调函数包好一起输出到前台echo "show({'name':'luxp','job':'teacher'});" 当输出的show({'name':'luxp','job':'teacher'});传输到前台时,就会执行 以上步骤就是jsonp的实现过程,所以jsonp是一种数据传输方式:

前台向后台在其他参数之外,额外传一个回调函数,后台就用这个回调函数将一个json串包含在其中,传回前台。

jsonp的回调函数的参数json串,这是jsonp与json之间的联系


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM