You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:40:29