使用AngularJS的$http服务向PHP文件POST传值失败,求解决
问题解决:AngularJS $http.post 传参PHP无法获取的问题
问题根源在于:AngularJS的$http.post默认会把数据以JSON格式发送,而PHP的$_POST只能解析application/x-www-form-urlencoded类型的表单编码数据,所以导致bname和bprice参数无法被识别。
下面提供两种直接可行的解决办法:
办法一:修改前端,发送表单编码数据
在AngularJS代码中,使用$httpParamSerializerJQLike序列化数据,并设置正确的请求头,让PHP能通过$_POST正常读取参数:
// 注意要在控制器依赖中注入$httpParamSerializerJQLike $scope.executefunc = function(name, price){ var data = { action: 'setcart', bname: name, bprice: price }; $http({ method: 'POST', url: 'cart.php', data: $httpParamSerializerJQLike(data), headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function(response){ alert(response.data); }, function(err){ console.error("Error:", err); }); };
办法二:修改PHP,直接读取JSON数据
如果不想改动前端代码,直接在PHP里读取原始的JSON请求体:
<?php session_start(); // 读取请求中的原始JSON数据并解码为数组 $rawData = file_get_contents('php://input'); $requestData = json_decode($rawData, true); // 先判断参数是否存在,避免报错 if(isset($requestData['bname']) && isset($requestData['bprice'])){ $name = $requestData['bname']; $price = $requestData['bprice']; echo $name; echo $price; } else { echo "参数缺失"; } ?>
额外验证步骤
- 先确认前端调用
executefunc时,name和price参数确实有值:可以在函数开头加console.log(name, price),打开浏览器控制台查看输出。 - 检查网络请求:按F12打开开发者工具,切换到Network标签,查看POST请求的Request Payload,确认里面包含
bname和bprice字段。
内容的提问来源于stack exchange,提问作者Aaryan Fatnani
相关产品推荐
相关产品推荐

