php如何接收js传来的json

在js中的代码如下:varurl="index.php";vardata="[{'doing':'createvote'},{'type':'type'},{'num':... 在js中的代码如下:
var url = "index.php";
var data="[{'doing':'createvote'},{'type':'type'},{'num':'num'},{'votetheme':'votetheme'},{'creater':'loginname'}]";
var jsondata=eval('('+data+')');

$.post(url, jsondata, function(res) {

});
那么在php中如何获取这个json?
比如这样获取,
$order=$_REQUEST[];//要求这个$order获取的是json所有数据比如经过解析以后,
$orderarray=json_decode($order);//$orderarray就是整个多维数组
那么这个$_REQUEST[];的参数应该怎么填
展开
 我来答
kasim416
2014-11-05 · TA获得超过707个赞
知道小有建树答主
回答量:351
采纳率:100%
帮助的人:288万
展开全部

感觉楼主对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:

<?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是之前定义的字符串

追问
你这么一说我明白了,不只是json_decode没理解,更重要的是对json和字符串的区别没有分明白,我想问下如果json是{'m':{}},格式的,那就在PHP里面接收M就可以,那问题是在js里面怎么往m里面动态添加健值对?
追答

首先说{m:{}}这个格式是可以的,可以将整个json对象,作为数据发送出去。到服务器可以直接转换成array数组。

例如调用createvote这个数据,那么就是$_POST['m']['doing']就是了


动态添加json对象

var data={"doing":"createvote","type":"type","num":"num","votetheme":"votetheme","creater":"loginname"};
$("body").append(JSON.stringify(data)+"</br>")
data['test']="dddddd";  //*****这句发挥作用******
$("body").append(JSON.stringify(data))
匿名用户
推荐于2018-03-13
展开全部
<?php
header("Content-type:text/html;charset=utf-8");
if($_POST){
    $d = $_POST['data'];//这里获取的直接就是数组了,不需要用到json_decode
    echo $d['doing'];
    //print_r($d);
    exit;
}
?>

<script src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(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);
        });
    });
});
</script>

<input id="xx" type="button" value="点击">
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jghdream
推荐于2016-01-16 · TA获得超过374个赞
知道小有建树答主
回答量:321
采纳率:91%
帮助的人:281万
展开全部
传值包括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']; //获取值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
巧克力王子qkl
2014-11-05 · 超过15用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:22.4万
展开全部
直接
$order = array();
$order['doing'] = $_POST['doing'];
$order['type'] = $_POST['type'];
...
就可以了
更多追问追答
追问
能不能用json_decode函数解析成一个数组么?然后从数组里面取
追答
先取后循环,先把$_POST的整个二维数组赋值到某个变量,然后循环这个变量就可以取值了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式