巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
建站专提News

php和js若何经由过程json相互通报数据相干题目切磋

一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-30 09:21:35 阅读数: 115

当咱们在连系php和javascript完成某些功效时,常常会用到json。json是js的一种数据格局,能够间接被js剖析。而php没法间接读取json数据,可是php供给了json_decode函数来对json数据停止转化,从而能够被php剧本拜候。同时,php也供给了json_encode函数来将数据转化成json格局。那末,js中的原生json与php中经由过程json_encode函数转化后的json是不是完整一样呢?明天,站长就和大师一路来切磋这个题目。咱们经由过程php向javascript通报数组数据时,凡是要将其转化为json格局,一遍javascript来获得,那末咱们就以数组为例,先来看一下二者之间的区分。 1、一维数组
斟酌php数组
复制代码 代码以下:
$array=array("1","2","3");

操纵json_encode函数转化后,对应的json字符串为
复制代码 代码以下:
["1","2","3"]。

细心的伴侣很快就发现,转化后获得的json字符串,便是javascript中的数组情势,那末是不是能够用js的数组拜候体例来拜候呢?
固然是能够的,可是你将这个json字符串通报给给js时,须要操纵urlencode函数对其编码,如:
复制代码 代码以下:
<a href="javascript:show("<?php echo urlencode(json_encode(array("1","2","3")));?>")" id="aj">拜候json</a>

咱们能够用上面的js代码来考证:
复制代码 代码以下:
function show(str){
var jobj=eval_r(decodeURI(str));
alert(jobj[2]);
}

大师本身试一试就会发现,是的,能够用js中拜候一维数组的体例来拜候它。eval体例将json字符串诠释为json东西,由于通报过去的是字符串,不转化的话,你获得将是字符串中第三个字符的值。
咱们再来对这个一维数组做一下变更,咱们发现上面的一维数组不指定索引,以是它默许为数字索引,此刻咱们来给它加上键名:
斟酌php数组
复制代码 代码以下:
$array=array("a"=>"1","b"=>"2","c"=>"3");

操纵json_encode函数转化后,对应的json字符串为
复制代码 代码以下:
{"a":"1","b":"2","c":"3"}


咱们很快就发现了此中的差别,最较着的便是字符串两头的[]变成了{},那末这个字符串是不是也能够按上面那样处置后被js拜候呢?咱们不防试一试:
复制代码 代码以下:
<a href="javascript:show("<?php echo urlencode(json_encode(array("a"=>"1","b"=>"2","c"=>"3")));?>")" id="aj">拜候json</a>
function show(str){
var jobj=eval_r(decodeURI(str));
alert(jobj.a);
}

大师若是脱手试了就晓得,点击链接后,不呈现弹窗。为甚么呢?是PHP天生的json字符串格局错误吗?不是的,这是咱们在操纵eval函数诠释的时辰,犯错了。把上面的函数代码换成:
复制代码 代码以下:
function show(str){
var jobj=eval_r("("+decodeURI(str)+")");
alert(jobj.a);
}

再尝尝吧!如何样,能够拜候了吧。这告知咱们,在操纵eval体例处置带有键名的json字符串时,须要在字符串两头加快括号。至于为甚么,站长也不晓得,站在伟人的肩膀上罢了。
这里要注重,虽然PHP天生的json字符串
{"a":"1","b":"2","c":"3"}被通报给js后没法被间接诠释为json格局,可是若是你在js中操纵该字符串间接建立json数据,是能够的。尝尝上面的代码吧:
复制代码 代码以下:
var jobj={"a":"1","b":"2","c":"3"};
alert(jobj.b);

2、二维数组
二维数组在PHP用的操纵很是普遍,是以领会二维数组转化后的json格局很是首要。有了上面的例子做铺垫,上面站长就间接给出示例代码:
复制代码 代码以下:
<a href="javascript:show("<?php echo urlencode(json_encode(array(array("1","2","3"))));?>")" id="aj">拜候json</a>
function show(str){
var jobj=eval_r(decodeURI(str));
alert(jobj[0][0]);
}

大师运转,会发现,这跟一维数组差未几,这是不带键名的例子,是以在show函数中,去掉字符串两头的括号也是能够的。
上面,咱们对二维数组停止一下变更,在第二维中插手键名,请看示例代码:
复制代码 代码以下:
<a href="javascript:show("<?php echo urlencode(json_encode(array(array("a"=>"1","b"=>"2","3"))));?>")" id="aj">拜候json</a>
function show(str){
var jobj=eval_r("("+decodeURI(str)+")");
alert(jobj[0].a);
}

大师运转代码后,发现,这里咱们拜候json数据的体例有点不一样。上面咱们用的是
alert(jobj[0][0]);
而这里咱们用的是
alert(jobj[0].a);不要问我为甚么,便是如许。这便是json的拜候体例。
上面的例子,咱们对二维数组的第二维增加了键名,上面咱们对第一维增加键名,看看拜候体例又有甚么差别:
复制代码 代码以下:
<a href="javascript:show("<?php echo urlencode(json_encode(array("k"=>array("1","2","3"))));?>")" id="aj">拜候json</a>
function show(str){
var jobj=eval_r("("+decodeURI(str)+")");
alert(jobj.k[1]);
}

这里咱们操纵的是
jobj.k[1]如许的体例,大师必然已发现了,只需数组中含有键名,当数组被转化为json格局后,就要操纵
json东西.键名
如许的体例来拜候该键下的元素,上面的例子中,k键下的数组元素是数字索引,以是在json中操纵k[1]如许的体例来拜候。
上面,咱们对数组的第一维和第二维都增加键名:
复制代码 代码以下:
<a href="javascript:show("<?php echo urlencode(json_encode(array("k"=>array("a"=>"1","2","3"))));?>")" id="aj">拜候json</a>
function show(str){
var jobj=eval_r("("+decodeURI(str)+")");
alert(jobj.k.a);
}

正以上面所提到的,只需含有键名,就必须以
json东西.键名
的体例来拜候,若是有多个键就要用
json东西.键名.键名...
,不要问我为甚么,这便是json的拜候体例,只需javascript的发现者能向你诠释,他为甚么要如许划定。
论断:
1、将php中的数组转化为json字符串通报给js时。若是数组不指定键名,那末能够间接操纵js的eval体例将其转化为json格局供js处置;若是数组中含有键名,那末在操纵eval体例处置时,须要操纵
()
将json字符串括起来。
2、若是数组中含有键名,转化为json字符串后,在js中要用
json东西.键名.键名...
的体例来拜候,若是是数字索引则用
json东西[1]

json东西.键名[1]
如许的体例。
上面,咱们首要会商了,在PHP向js通报json字符串时,须要注重的事变。上面咱们再来会商,用js向php通报json字符串时须要若何处置。
伶俐的你必定已晓得了,只需将json数据用引号引发来作为字符串通报给PHP【凡是用ajax停止】就能够用json_decode函数解码了。没错!便是如许!可是在机关json字符串的时辰必然要细心,若是你不常常机关json字符串,那末没关系用
echo json_encode(array("k"=>array("a"=>"1","2","3")))
如许的体例,检查你须要机关的方针字符串的json格局。如许你就能够在js中按照你想要的成果来机关了!
好了,明天对php和js之间若何操纵json数据停止通讯就会商到这里,大师能够本身再尝尝将php的东西范例停止json编码后若何通报给js。
一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。更多资讯:tags标签

相干消息more

20
04月
浅析border-radius若何兼容IE

今朝而言firefox,opera,chrome等支流阅读器都已撑持border-radius属性,惟独IE8和之前。处理体例便是在用的... >>概况

15
04月
傍上阿里百世汇通改名为百世快递 辞别“灵通系

10月09日报道:傍上阿里的百世汇通将以改名的体例完全向灵通系说再会,同时开启一段另类的转型之路。北京商报记者昨日得悉,百世汇通将正式改名为... >>概况

22
04月
GNU Parallel的详细操纵

它是甚么?GNU Parallel是一个shell东西,为了在一台或多台计较机上并行的履行计较使命,一个计较使命能够是一条shell号令或... >>概况

30
03月
UPS(不中断电源)道理及运维

简介:本文仅代表作者小我概念,不代表巅云官方发声,对概念有疑义请先接洽作者自己停止点窜,若内容不法请接洽平台办理员,邮箱2522407257... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站