PHP使用POST传递json数据的接收与处理问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP使用POST传递json数据的接收与处理问题相关的知识,希望对你有一定的参考价值。
是这样的,我的项目里需要使用POST给php页面传递一个JSON数组,然后接收并获取取中的值,并用FOR循环将取到的数据插入数据库 但是发现一个问题,我可以直接将接收到的数据插入数据库 却不能 转成数组 再从数组中取出 对应的项目 的值插入数据库 这是代码 :
<?php
$dingdan=$_POST['caidan'];
$json = new Services_JSON();
$dingdan = $json->decode($GLOBALS["HTTP_RAW_POST_DATA"]);
$dingdan_zhuanhuan = iconv("gbk", "utf-8//ignore",$dingdan);
$dingdan=(json_decode($dingdan_zhuanhuan, true));
function zhuanhua($ARR)
for($i=0;$i<count($ARR);$i++)
"];
?>
["dianming":"川味小吃","caiming":"三文鱼","caipinjiage":"35","goumaishu":"1","goumaijiage":"35","dingcanrenshoujihao":"18088082478"]
把每一项取出插入mysql.上同是传过来的caidan 信息
mixed json_decode ( string $json [, bool $assoc ] )
var_dump(json_decode($json));
var_dump(json_decode($json, true));
如果不带参数,则返回为对象
带上true时,返回数组
foreach($ARR as $k=>$v)
echo 'key='.$k.';value='.$v;
单独处理每个key 和对应的value就好追问
["dianming":"川味小吃","caiming":"三文鱼","caipinjiage":"35","goumaishu":"1","goumaijiage":"35","dingcanrenshoujihao":"18088082478"]
这是我的JSON 图片是我的处理PHP代码 这个怎么数据总是插不进去啊
不好意思没看到有图片
你传中文有编码处理吗?现在服务器端口php打印出接收的json,看数据收到没
然后试着单独打印某个属性,确保数据格式是正确有效的
不好意思啊 刚才图片没传上来,耽误你时间了,麻烦帮忙再看看这个问题 我去提高悬赏值 谢谢 急用

你的数据库语句直接在数据库运行没错是吧
打印一下$query结果是对的吗?
$ianming2和$caming2是否取到 了

json格式的问题,传过来的数据没有成功被转化成json对象
追问["dianming":"川味小吃","caiming":"三文鱼"]这个是传过来 并插入到数据库里面的JSON数据 我真的无奈了 觉得自己已经笨到无可救药了
追答$a = '["dianming":"川味小吃","caiming":"三文鱼"]';$json = json_decode($a,true);
foreach($json as $item)
$dianming = $item["dianming"];
$caiming = $item["caiming"];
echo $dianming.';'.$caiming;
测试了一下,这样获取的数据是没问题的
参考技术A $dingdan=(json_decode($dingdan_zhuanhuan, true));改为 $dingdan=(array) json_decode($dingdan_zhuanhuan, true);
for循环里 $ARR 也强制转换下 (array)$ARR
遇到过和你一样的问题,我是这么解决的
ajax传值php页面接收处理为json 有值 但返回为null 求解
html
$(function()
$("#aId").change(function()
var aId = $("#aId").val();
$.ajax(
type:"post",
url:"__URL__/liandong",
data:"aId="+aId,
//dataType:"json",
success:function(data)
alert(data);
);
);
);
php
public function liandong()
$aId=$_POST['aId'];
$rs = $this->tvname->where("aId=".$aId)->select();
file_put_contents('a.txt', json_encode($rs));
return json_encode($rs);
其次,返回来的是对象,alert出来 可能显示[object],此表示有值,
可用 data.key取出值key表示$rs数组键名
第三,若dataType:"json" 后返回的仍然是null,则说明你可能正在使用跨域请求
跨域请求请用AJAX的JSONP方式,请改为如下
JS:
$.ajax(
url:"__URL__/liandong",
dataType:'jsonp',
data:'callback=jsoncallback&aid='+aid,
jsonp:'jsoncallback',
timeout:3000
);
//回调函数
function jsoncallback(json)
alert(json.key);//key表示$rs数组键名
php:
return $_POST['callback']."(". json_encode($rs).")";追问
dataType:json没注释也是一样的,返回null,而且也没跨域,都是在同一个项目里的
追答那只有是请求的路径不对了
追问我在php页面 file_put_contents 文本里有根据ajax传值读数据库获取的所有值
参考技术A url:"__URL__/liandong",这个URL 能访到吗?
return json_encode($rs);
这个$rs 里面有中文字不,是不是非UTF8的编码。如果是非UTF8 请先转成 UTF8 再 json_encode追问
我在php页面 file_put_contents 文本里有根据ajax传值读数据库获取的所有值
但回到html页面 success:function(data)alertdata获取不到 弹的是null
以上是关于PHP使用POST传递json数据的接收与处理问题的主要内容,如果未能解决你的问题,请参考以下文章
ajax传值php页面接收处理为json 有值 但返回为null 求解
使用 Retrofit 发送 POST 请求并接收 Json 响应无法使用响应数据我需要将其传递给另一个活动
能够使用 $_GET 但不能接收数据 $_POST [重复]