使用$.ajax请求php资源的问题

最近刚学php,请求时有这样的问题,
在html页面中:

let params={
    'productid':1,
    'num':1,
}
params=JSON.stringify(params);
$.ajax({
    type:"post",
    url:"addCart.php",
    async:true,
    data:params,
    dataType:'json',
    success:function(){
                    
    },
});

在php中:
//1、接收传递过来的POST参数

$productid=intval($_POST['productid']);
$num=intval($_POST['num']);

问题就是:这样请求会报错,去掉json.stringify(params)却可以,应该怎样接收JSON格式的数据呢

阅读 2.5k
3 个回答

因为利用JSON.stringify转化后的字符串,其实并不是post请求中实际需要的查询字符串形式,例如productid=1&num=1
jquery的ajax的data参数在接受到对象形式的数据时会先将其转化为查询字符串形式,所以这里没有必要先将params对象进行字符串化,如果想要自己手动做这步,需要进行序列化。

你可以把json字符串当一个参数传给后台,比如data: {json: json.stringify(params)},后台用json_decode($_POST['json'])可以去到

当然你非要把整个请求正文当作json字符串,可以用file_get_contents('php://input')获取正文再去decode解析

普通的url后面追加参数,form表单等形式服务器都帮你处理好了,所以可以直接根据参数key获取value。你stringify后传递的数据是字符串。在接受时你需要将json字符串反序列化为对象。我知道在java中是可以通过Jackson进行转化处理,php应该也有类似的库。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题