如何通过$http POST发送数组数据并在PHP中解析?遇解析问题求助
解决AngularJS POST JSON数组到PHP无法用$_POST解析的问题
嘿,我之前也踩过这个坑!核心问题在于:PHP的$_POST默认只处理表单编码(application/x-www-form-urlencoded或multipart/form-data)的请求数据,而你用AngularJS发送的是纯JSON格式的请求体,这种数据不会自动填充到$_POST里。另外你代码里的Content-Type头还写错了——多写了一遍Content-type:,这会导致服务器无法正确识别请求格式。
下面给你两种可行的解决办法,按需选择就行:
方法一:修改前端请求,转为表单编码格式
用AngularJS内置的$httpParamSerializerJQLike工具把数组序列化,让PHP能直接通过$_POST获取数据:
var send = [{"host":"1","name":"2","password":"3"}, {"host":"4","name":"5","password":"6"}, {"host":"7","name":"8","password":"9"}, {"host":"10","name":"11","password":"12"}]; $http({ method: 'POST', url: 'file.php', data: $httpParamSerializerJQLike({sendData: send}), // 把数组包装在对象里序列化 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, // 改为表单编码头 }).then(function(response) { // 成功回调逻辑 console.log('请求成功:', response.data); }, function(response) { // 错误回调逻辑 console.error('请求失败:', response); });
对应的PHP代码:
// 解析序列化后的数组 $sendData = json_decode($_POST['sendData'], true); print_r($sendData); // 就能看到你发送的数组结构了
方法二:后端直接读取原始请求体(推荐)
如果想保持前端发送JSON的方式(现在前后端交互更常用这种模式),只需要在PHP里直接读取请求的原始内容,再解析成JSON即可:
首先修正你前端的Content-Type头(去掉重复的Content-type:):
$http({ method: 'POST', url: 'file.php', data: send, headers: { 'Content-Type': 'application/json' }, // 修正后的请求头 }).then(function(response) { // 成功处理逻辑 }, function(response) { // 错误处理逻辑 });
然后在file.php中编写解析代码:
// 读取原始请求体内容 $rawRequest = file_get_contents('php://input'); // 解析为PHP关联数组 $sendData = json_decode($rawRequest, true); // 测试输出 if ($sendData) { print_r($sendData); } else { echo 'JSON解析失败,请检查请求数据格式'; }
这样$sendData就完全对应你前端发送的数组,直接使用即可。
内容的提问来源于stack exchange,提问作者chintu
相关产品推荐
相关产品推荐

