php如何接收js传来的json

2024-12-17 16:13:12
推荐回答(4个)
回答1:

感觉楼主对json_decode这个函数有点理解错误,这个函数时将一个json格式的字符串转化成php数组用的,前提是其中的参数必须为字符串

那我们回头看下楼主的代码,经过eval以后jsondata变成了一个数组形变量,结构似乎有点奇怪,有5个元素的一个数组,但是每个元素又是一个json对象,而每个json对象又只有一个变量。换句话说如果想获取createvote这个值,那么就需要调用jsondata[0].doing


而且,post发送的数据要求是json对象,而楼主这个根本就是不是json...能否发送都是个问题...


楼上那个说$_POST获取数据的,我试了一下,似乎不行。$_POST['doing']压根就是个未定义的值


如果要json_decode那就没必要先eval一下,感觉会弄巧成拙


给楼主一个代码

js:

var data='{"doing":"createvote","type":"type","num":"num","votetheme":"votetheme","creater":"loginname"}';
$.post(url, {data:data}, function(res) {alert(res)});

注意data变量,‘与“的位置,不要写反,反了的话json_decode是不能编译的


php:

if(isset($_POST["data"]))var_dump(json_decode($_POST["data"], true)); 
?>


根据返回的格式很明显就是一个php的array格式


post的参数必须是name->value的格式,如果单纯post一个变量,那么就相当于只有value,没有name,所以我这里将post的传参值写为{data:data}第一个data是name,第二个data是之前定义的字符串

回答2:

header("Content-type:text/html;charset=utf-8");
if($_POST){
    $d = $_POST['data'];//这里获取的直接就是数组了,不需要用到json_decode
    echo $d['doing'];
    //print_r($d);
    exit;
}
?>



$(document).ready(function() {
    $("#xx").click(function(){
        var url = "test.php";
        var str ="{'doing':'createvote','type':'type','num':'num','votetheme':'votetheme','creater':'loginname'}";//json格式字符串
        var data = eval('('+str+')');//转换成数组对象,不加这步,那么PHP获取的是字符串。
        $.post(url, {'data': data}, function(res) {//注意jquery的$.post的第2个参数必须是键值对形式
            alert(res);
        });
    });
});


回答3:

传值包括get或post,不论哪种方式,都有传参的键值,例如
get:
js文件:window.location.href='/index.php?ac={"id":100}';//传值
php文件:$json = $_GET['ac']; //获取值

post:一般是用ajax来传的值,例如:
js文件:$.post('/index.php',{'ac':'{"id":100}'},function(){ //传值
//返回值

});

php文件:$json = $_POST['ac']; //获取值

回答4:

直接
$order = array();
$order['doing'] = $_POST['doing'];
$order['type'] = $_POST['type'];
...
就可以了