PHP与Ajax

 

如何用PHP接收JSON格式数据

1.一般来说,我们直接用$_POST $_REQUEST $_GET这样的超全局变量接收就好了

<?php
    $obj_temp=$_POST['data'];
    echo $obj_temp['name'];
?>

2.但是有时候我们希望转换下格式,比如说数组,这个时候我们就要用到json_decode()方法

先来模拟下前端向PHP发送Request的环境

$(document).ready(function(){
    var jsonText ='{"user":[{"username":"xx","password":"123"}, {"username":"yy","password":"456"}]}';
    $("#testLink").click(function(){   
        $.post('test.php',{data:jsonText},function(data){
            alert(data);
        });
    });
});

然后我们用test.php来接收这个请求,并且把请求的data解析出来

<?php 
    $arr = json_decode($_POST['data'],true);
    print_r($arr);
?>

json_decode可以将json字符串转化为数组,这样我们就可以逐条读取数据了,解析出来的数组是这样的

Array ( 
    [user] => Array ( 
        [0] => Array ( 
            [username] => xx 
            [password] => 123 
        ) 
        [1] => Array ( 
            [username] => yy 
            [password] => 456 
        ) 
    ) 
) 

 

 

 

如何用PHP返回JSON格式数据

 

下面这句话必不可少。

header('Content-type: text/json');

 

总的来说,我们一般是在PHP中创建数组,然后用json_encode()方法把数组转化成json格式

<?php
    header('Content-type: text/json');
    $fruits = array (
        "fruits"  => array("a" => "orange", "b" => "banana", "c" => "apple"),
        "numbers" => array(1, 2, 3, 4, 5, 6),
        "holes"   => array("first", 5 => "second", "third")
    );
    echo json_encode($fruits);
?>

需要注意的是,需要先把数组中的汉字内容进行编码转换,将GBK的编码转换为UTF-8,否则json_code()会将汉字转为NULL。(从utf-8数据库中取出的值不需要进行转化)

形式可参见如下代码

<?php
    while($row = $db->fetch_array($query)){
        $row['uname'] = mb_convert_encoding($row['uname'],'utf-8','gbk');
        $row['content'] = mb_convert_encoding($row['content'],'utf-8','gbk');
        $com[] = $row;
    }
    echo json_encode($com);
?>

 

posted @ 2016-01-12 20:02  zcynine  阅读(339)  评论(0编辑  收藏  举报