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

使用Fetch POST传递Select数据到PHP后端时的Undefined array key报错排查

问题

我希望通过fetch的POST方法将select组件的数据传递到PHP后端,用于SQL语句执行。以下是我的实现代码(注:select的选项由其他脚本动态生成):

<div class="col-md-4">
 <label for="ImpiantoBatt" class="form-label">Impianto (proprietario e indirizzo)</label>
 <select id="ImpiantoBatt" name="ImpiantoBatt" class="form-select-ImpiantoBatt" required onchange="scelta('ImpiantoBatt', this)">
 <option value="">Seleziona</option> 
 </select>
</div>

对应的脚本:

<script>
function scelta(ImpiantoBatt, element) {
 const data = {
                    ID: document.getElementById(ImpiantoBatt).value
              }
 fetch("php/batteries_search.php", {
      method: "POST",
      body: JSON.stringify(data),
      headers: {
                 "Content-Type": "application/json; charset=UTF-8"
               }
 })
   .then((data) => console.log(data))
</script>

控制台返回状态码200的Response对象,且前端可正确输出数据(例如{ID: '7'})。但后端使用$plantID = ($_POST['data']);接收数据时,出现警告:Warning: Undefined array key "data"。请问错误出在哪里?

解决方案

核心问题:前端发送的是JSON格式数据,但PHP的$_POST只能解析**表单编码(application/x-www-form-urlencoded)**类型的数据,无法直接读取JSON格式的请求体。你用JSON.stringify(data)发送的是纯JSON字符串,所以$_POST里自然没有data这个键。

这里提供两种可行的解决办法:

办法一:修改前端,发送表单编码格式数据

把fetch的请求体改成FormData或URLSearchParams格式,这样PHP就能直接用$_POST读取:

function scelta(ImpiantoBatt, element) {
  const data = new FormData();
  data.append('ID', element.value); // 直接用element.value更简洁,无需重复getElementById
  fetch("php/batteries_search.php", {
    method: "POST",
    body: data
    // 无需手动设置Content-Type,浏览器会自动添加正确的请求头
  })
  .then(response => response.text()) // 先解析响应内容,否则console.log的是Response对象本身
  .then(result => console.log(result))
}

后端接收代码:

$plantID = $_POST['ID']; // 直接读取ID字段

办法二:修改后端,直接读取JSON请求体

如果坚持用JSON格式发送数据,后端需要直接读取PHP的输入流来解析:

// 读取请求体中的JSON字符串
$jsonData = file_get_contents('php://input');
// 将JSON解析为关联数组
$data = json_decode($jsonData, true);
// 获取ID值
$plantID = $data['ID'];

这种方式不依赖$_POST,直接解析原始请求数据。

内容的提问来源于stack exchange,提问作者Andry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:35:18