php.net上的文档,$json是个json格式的字符串,通过json_decode()得到的是php变量/对象
$data= json_decode(urldecode(I('data')),TRUE);$data_arr=object_array($data); //object_array()是functionecho $data_arr['title_header'];
public function object_array($array){
if(is_object($array)) { $array = (array)$array; } if(is_array($array)) { foreach($array as $key=>$value) { $array[$key] = $this->object_array($value); } } return $array; }//转换成数组//thinkphp 里的代码
urldecode()得到的是json格式字符串,json_decode()得到的是json数组或者对象,第二个参数true代表转换成数组,把它强制生成PHP关联数组.,false代表转换成对象
jquery:
简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax
jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求
where($data)->getField('title');//,from,content1,category,is_top,create_at $arr['from'] = "xxxx"; $arr['content'] = "xxxx"; $arr['category'] = "xxxx"; $arr['is_top'] ="xxxx"; $arr['create_at'] ="xxxx"; echo json_encode($arr);?> //php
$.post(
"{:U('modify')}?id="+id, function(data){ data = eval("(" + data + ")");//eval():字符串->对象console.log(data); // output: Object {
title: "GGGGG", from: "GGG"}//title,from是对象的属性
var title = data.title; //string
var from = data.from; //string
});
/*
var show_to_modify = JSON.stringify(data);//jsonObj->json字符串 console.log(show_to_modify); // output:{"title":"GGGGG","from":"GGG"} show_tom_modify.title=>undefined
var jsonStr1 = show_to_modify.split("{")[1];
var jsonStr2 = jsonStr1.split("}")[0]; console.log(jsonStr2.split(",").length); //2 var str = jsonStr2.split(","); var jsonStr3 = str[0]; var show_header = jsonStr3.split(":")[1]; //undefined var jsonStr4 = str[1]; var show_from = jsonStr4.split(":")[1]; //undefined*/
php里接收js $.ajax()的json数据的时候,函数里用的是header("Content-Type:application/json;charset=utf-8");
而不能用header("Content-Type:text/html;charset=utf-8");
因为你要告诉客户端,该以什么方式来接受/解析数据,你是打出json的,就应该跟客户端说,这不是text/html, 而不是 application/json.
也就是说php回传json的时候,特别是有中文时要加header("Content-Type:application/json;charset=utf-8");这句。
关于json的:
$a = array( 'Jack' , 'Sam' , 'Tom' ); echo json_encode( $a );
当 JavaScript 请求到上面的代码,PHP 将解析数组 $a 为 json 字符串并返回到前端,但事实上在前端拿到的返回结果却是一个数组。
[ "Jack" , "Sam" , "Tom" ]
这个结果对于前端来说也许并不是所期望的,对于 JavaScript 来说,数组和 json 的关系非常密切,甚至可以简单地把 json 理解为关联数组,但这并不意味着二者可以划等号,比如 json 没有 length 属性,也不能进行数字索引,json 是键值对,而 JavaScript 的数组严格说来是没有"键"的,这和 PHP 的差异比较大。那么为什么 json_encode 的返回结果是数组呢?
本文开头的 PHP 代码中的数组是严格意义上的数字索引数组,json_encode 方法在处理这样的数组的时候会返回数组字符串,它需要同时满足两个条件:1. 数字索引数组,2. 索引值从 0 开始。这意味着下面的代码也会返回同样的结果:
$b = array( '0' => 'Jack', '1' => 'Sam', '2' => 'Tom' ); echo json_encode( $b );
这两个条件的任意一个没有获得满足,那么 json_encode 方法才真正的返回 json 字符串:
$c = array( 'person-1' => 'Jack', 'person-2' => 'Sam', 'person-3' => 'Tom' ); echo json_encode( $c );
这时前端得到的结果如下:
{ 'person-1' : 'Jack', 'person-2' : 'Sam', 'person-3' : 'Tom' };