php中使用json_encode问题
先看看下面的代码,就知道是什么问题了.
header("Content-Type:text/html;charset=utf-8"); $array = array('湖北','盛天','网络 ','研发部'); echo json_encode($array); echo "<hr/>"; $array = array(0=>'湖北',3=>'盛天',5=>'网络 ',6=>'研发部'); echo json_encode($array); $array = array('province'=>'湖北','name'=>'盛天','network'=>'网络 ','dept'=>'研发部'); echo json_encode($array); echo "<hr/>"; $array = array(array('id'=>1,'title'=>'武汉'),array('id'=>2,'title'=>'盛天'),array('id'=>3,'title'=>'研发')); echo json_encode($array); echo "<hr/>"; $array = array(0=>array('id'=>1,'title'=>'武汉'),2=>array('id'=>2,'title'=>'盛天'),3=>array('id'=>3,'title'=>'研发')); echo json_encode($array);
用json_encode来生成json的时候如果生成的数组那么数组的key必须从0开始依次递增的,不然生成的json就是对象了
解决方案:
1、在服务器端:
第一种:可以用拼接字符串的形势来生成
$array = array(0=>array('id'=>1,'title'=>'武汉'),2=>array('id'=>2,'title'=>'盛天'),3=>array('id'=>3,'title'=>'研发')); $jsonStr=""; foreach ( $array as $val ){ $jsonStr .= "{ 'id':'".$val['id']."', 'title':'".$val['title']."' },"; } $jsonStr = "[".substr($jsonStr, 0,-1)."]"; echo $jsonStr;
第二种:如果想得到的是数组的形势来就用array_merge要转换的数组进行排行一下就行了
$array = array(0=>'湖北',3=>'盛天',5=>'网络 ',6=>'研发部'); echo json_encode($array); echo "<hr/>"; echo "利用array_merge函数重新对key进行排列:<br/>"; echo json_encode(array_merge($array));
2、在客户端
在得到服务器端返回来的数据的时候,不要用length来得到,可以用for(var r in msg)来读取数组
$.ajax({ url:"index.php", success:function(msg){ eval("var msg="+msg); /*for(var i=0;i<msg.length;i++){ alert(msg[i]['title']); }*/ for(var r in msg){ alert(msg[r]['title']); } } });
posted on 2012-08-29 18:21 kudosharry 阅读(322) 评论(0) 编辑 收藏 举报