php javascript 交互,php javascript 交互

查看原文: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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值