摘要:
使用jquery.post获取json数据,并对返回的json数据进行处理。php相应post请求返回json数据,js将返回数据转换为json对象进行处理。
实现:
前端:使用jquery.post请求数据
$.post(url,data,success(data))
响应请求:使用php响应请求(前面借鉴了phpwind的响应ajax请求,所以返回的是xml格式数据)
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);$output = json_encode($arr);//{"a":1,"b":2,"c":3,"d":4,"e":5}header("Content-Type: text/xml;charset=utf-8");echo "";
前端处理返回数据:首先取出xml中数节点值,然后将其转换为json对象
function success(result){ if(typeof(result) == "object"){ result = result.lastChild.firstChild.nodeValue;//xml取节点值 eval("result = "+result);//转换为json对象 } ....}
相关知识点:
PHP中的JSON
1、json_encode():该函数主要用来将数组和对象,转换为json格式
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);echo json_encode($arr);//{"a":1,"b":2,"c":3,"d":4,"e":5}
$obj->body = 'another post';$obj->id = 21;$obj->approved = true;$obj->favorite_count = 1;$obj->status = NULL;echo json_encode($obj);/*$obj->body = 'another post';$obj->id = 21;$obj->approved = true;$obj->favorite_count = 1;$obj->status = NULL;echo json_encode($obj);*/
注:json只能是utf-8编码,son_encode()的参数必须是utf-8编码,否则会得到空字符或者null
2、索引数组和关联数组
索引数组$arr = Array('one', 'two', 'three');echo json_encode($arr);//"[]"(数组)//["one","two","three"]
关联数组
$arr = Array('1'=>'one', '2'=>'two', '3'=>'three');echo json_encode($arr);//"{}"(对象) //{"1":"one","2":"two","3":"three"}
将"索引数组"强制转化成"对象"
json_encode( (object)$arr );//或//json_encode ( $arr, JSON_FORCE_OBJECT );
3、类(class)的转换
公开变量(public),其他东西(常量、私有变量、方法等等)都遗失class Foo { const ERROR_CODE = '404'; public $public_ex = 'this is public'; private $private_ex = 'this is private!'; protected $protected_ex = 'this should be protected'; public function getErrorCode() { return self::ERROR_CODE; }}$foo = new Foo;$foo_json = json_encode($foo);echo $foo_json;//{"public_ex":"this is public"}
$json = '{"foo": 12345}';$obj = json_decode($json);print $obj->{'foo'}; // 12345
5、注意
1)、json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null 2)、json的分隔符(delimiter)只允许使用双引号,不能使用单引号 3)、json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号 4)、最后一个值之后不能添加逗号(trailing comma)
处理返回json数据
将返回数据转换为json,私用eval(),但报"invalid label"错误,解决方法
var json = eval('(' + response + ')'); //或 eval('var json = ' + response);
参考:
[1]
[2]