php json jsonp区别,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之间的联系

705b2b85d093b21eeddc1ed3283d9c3f.png

举报/反馈

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值