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

使用Fetch API发送POST请求未返回预期更新数据的问题

问题分析与修复方案

我一眼就看到了两个核心问题,这正是你没拿到预期数据的原因:

1. 请求格式不匹配application/x-www-form-urlencoded要求

你把Content-Type设为了application/x-www-form-urlencoded,但请求体用的是JSON.stringify(postData)生成的JSON字符串——这完全不符合该格式的规范。这种类型要求数据是键值对拼接的表单格式(类似key1=value1&key2=value2),而不是JSON。

2. 缺少服务器要求的entry字段

服务器管理员明确说了请求必须包含entry字段,但你的postData里根本没有这个结构,服务器自然无法正确处理你的请求。

修复后的完整代码

function saveForm() {
  var street = document.getElementById("street").value;
  var provinceId = document.getElementById("province").value;
  var provinceName = provinces[provinceId];
  var cityId = document.getElementById("city").value;
  var cityName = cities[cityId].name;
  var message = document.getElementById("message").value;

  // 按照服务器要求,把数据包裹在entry字段中
  var postData = {
    entry: {
      Notes: message,
      Address: `${provinceName},${cityName},${street}`,
    }
  };

  // 转换为application/x-www-form-urlencoded格式的表单数据
  var formData = new URLSearchParams();
  // 因为entry是对象,需要把它序列化为字符串后作为entry字段的值
  formData.append('entry', JSON.stringify(postData.entry));

  console.log("sent: ", formData.toString()); // 可以看到格式化后的表单字符串

  fetch("https://wavy-media-proxy.wavyapps.com/investors-notebook/inst1/", {
    method: "POST",
    body: formData,
    headers: {
      "Content-Type": "application/x-www-form-urlencoded",
    },
  })
    .then((response) => {
      // 先检查响应状态是否成功
      if (!response.ok) {
        throw new Error(`HTTP error! Status: ${response.status}`);
      }
      // 解析响应体为JSON(如果服务器返回JSON格式)
      return response.json();
    })
    .then((data) => {
      console.log("Success: ", data); // 现在能拿到服务器返回的实际数据了
    })
    .catch((error) => {
      console.error("Error:", error);
    });
}

关键修改点说明

  • 结构调整:把原有数据放入entry字段,满足服务器的格式要求。
  • 格式转换:用URLSearchParams生成符合application/x-www-form-urlencoded规范的请求体,而不是直接传JSON。这里因为entry的值是对象,所以先把它序列化为JSON字符串再添加到表单中。
  • 响应解析:原来的代码直接打印了fetch返回的Response对象,这只是响应的元数据,不是实际的返回内容。现在我们先调用response.json()(如果服务器返回的是文本,就用response.text())来解析响应体,才能拿到你预期的带ID的字符串。

额外测试建议

  • 打开浏览器的开发者工具(F12),查看网络请求的"Payload"标签,确认发送的表单数据格式正确。
  • 检查响应的"Preview"或"Response"标签,看看服务器返回的具体内容,方便进一步排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:10:31