美工统筹SEO,为企业电子商务营销助力!
php和js若何经由过程json相互通报数据相干题目切磋
一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-30 09:21:35 阅读数: 115
斟酌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和.net中des加解密的完成体例 | 下一篇:php数组的概述及分类与申明代码演示