php如何接收js传来的json
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[];的参数应该怎么填 展开
感觉楼主对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="点击">
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']; //获取值
$order = array();
$order['doing'] = $_POST['doing'];
$order['type'] = $_POST['type'];
...
就可以了
能不能用json_decode函数解析成一个数组么?然后从数组里面取
先取后循环,先把$_POST的整个二维数组赋值到某个变量,然后循环这个变量就可以取值了