重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
PHP接收JSON格式的数据
创新互联建站从2013年成立,是专业互联网技术服务公司,拥有项目网站建设、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元巩义做网站,已为上家服务,为巩义各地企业和个人服务,联系电话:18982081108
在API服务中,目前流行采用json形式来交互。
给前端调用的接口输出Json数据,这个比较简单,只需要组织好数据,用json_encode($array) 转化一下,前端就得到json格式的数据。
接收前端提交的json数据稍微复杂一点,原因是:PHP默认识别的数据类型是application/x-标准的数据类型。因此,对型如text/xml 或者 soap 或者 application/octet-stream 和application/json格式之类的内容无法解析,如果用$_POST数组来接收就会失败!
此时可以使用$GLOBALS['HTTP_RAW_POST_DATA'] 或 file_get_contents('php://input') 来获取提交的数据
查看手册,可以发现$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST的区别:
$_POST:通过 HTTP POST 方法传递的变量组成的数组,是自动全局变量。
$GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。也就是说基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。
补充说明:PHP默认识别的数据类型是application/x-标准的数据类型。
?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="点击"
1、你可以在接收的页面这样写把结果打印出来啊
?php
echo "pre";
print_r($_POST);
?
2、返回的结果是:
3、这样就可以当做一个二维数组取值了
$_POST["hobby"][0]或者$_POST["hobby"][1]
使用遍历,把数组的数每次赋值一个给某一个元素,假设为$X,然后再把$cArr['keyword']=$cArr['keyword'].$X
举个例子:
input type="checkbox" name="book[]" value="book1" /
input type="checkbox" name="book[]" value="book2" /
name写成数组的形式
这样$_POST['book']就变成了一个数组
for($i = 0; $i count($_POST['book']); $i++){
echo $_POST['book'][$i];
}
遍历输出数组
如果上面的两个选项都选中,输出就是book1book2
你这个是明显的不会调试,如果ajax请求成功了,你要看php的方法是否走的通,走通了如果是获取到数据的,这时候返回给前台时,你要看走的是success,还是error,success里是空数组,很有可能返回到error中了,如果返回到error,要看你的请求是同步还是异步,请求类型datatype有没有转换,是否需要转换。