查看原文:http://blog.0and1.cn/?p=155
最近写了个小网页,对于JS与php间的数据传递小小研究了下。大致思路就是,在JS与PHP之前想要传递数据,最简单的方法就是传递字符串,json就是将各种数据串行化之后,在php与js间传递。
PHP5.2开始已经将JSON作为PHP扩展的一部分,所以并不需要另外安装JSON。另外为了保证下面的PHP
JSON实例不出现中文乱码,请保证你的编码格式为UTF8。
在PHP中解析JSON主要用到json_encode和json_decode两个PHP
JSON函数,号称比PHP解析XML方便很多,xml方式还没有研究过。
1,php中生成json
PHP与JSON格式数据交互时,第一步需要将PHP数组转换为JSON格式的数据,可使用PHP5自带的json_encode函数,当PHP解析传递过来的JSON格式数据时需要使用json_decode函数进行解析转换为PHP数组,PHP转换并解析JSON数据的实例代码如下
$json_arr = array(0:abc 1:bcd);
$php_json = json_encode($json_arr);
echo $php_json;
$php_json = json_decode($php_json);
print_r($php_json);
?>
说明:这里通过PHP定义了关联数组,然后通过json_encode转换为JSON格式的数据,通过echo语句可以看到转换后的JSON对象,通过PHP
JSON解析函数json_decode可以将JSON格式的数据解析为PHP的关联数组。如果编码不正确,JSON中文会出现乱码。
这个时候字符串$php_json就可以直接传递给JS使用了。
2, json to Javascript:
JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或 工具包。所以只需要将json字符串echo到JS中,在JS里面就像引用普通数组一样
var json_peopleArray= <?php echo $json_peopleArray; ?>;
json_peopleArray[0].diff = Number(tmp_diff.value);
当JS操作完数据之后,还可以在使用JS中function,确保数据还是json格式JSON.stringify(json_peopleArray).
当然个人觉得,这个好像不是必须的,因为本来数据就都是json格式的。
3, JS (to Json) to php
如果还需要传回php,那就使用XMLHttpRequest
xmlHttpRequest = GetXmlHttpObject();
if (xmlHttpRequest != null){
alert ("here2!");
alert (json_peopleArray[0].name_user);
// url = encodeURIComponent(url);
url="index.php?command=update&argv=1&argc0="+JSON.stringify(json_peopleArray);
xmlHttpRequest.onreadystatechange=rtFun;
xmlHttpRequest.open("GET",url,true);
xmlHttpRequest.send(null);
}
4, 实际中遇到一个比较麻烦的问题:
在php中,一个class对象数组中,每一个item是一个'myClass' object (myClass
是自定义个类class名字). 所以,我们可以使用例如 peoples[0].name这样访问。
但是,当把对象数组转成json格式之后,传回php,这个时候便不能再正常访问了,再次使用print_r打印数组,发现每一个item变为std
object。所以没有找到能再转为myClass
object的方法。所以,这里只能把object转为array之后,就能正常使用了。所以需要在decode的时候给出第二个参数true. $php_json
= json_decode($argc[0],
true);
比如在json之前这样访问
json_peopleArray[0].diff = Number(tmp_diff.value);
但是转为Array之后这样访问
json_peopleArray[0][diff] = xxxxx;