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

如何在JavaScript中使用POST方法及Bearer令牌调用API?代码求助

排查JavaScript POST请求携带Bearer令牌的问题

咱们来一步步梳理你这段代码里的问题,主要有几个关键地方需要调整:

1. Authorization头的语法错误

你写的"Authorization":Bearer + ${token}``是明显的语法问题——模板字符串里不需要额外的+号,这样会导致请求头变成Bearer + [你的token值],服务器根本识别不了正确的Bearer令牌格式。正确的写法应该直接把变量嵌入模板字符串:

"Authorization": `Bearer ${token}`

2. Token解析的潜在风险

你用JSON.parse(get)解析localStorage里的token,但要确认localStorage中存储的确实是JSON格式的字符串。如果你的token本身就是普通字符串(比如后端直接返回的token字符串,没有用JSON包裹),那JSON.parse会直接报错,导致后续代码无法执行。可以加个简单的错误捕获:

let token = localStorage.getItem("token");
try {
  token = JSON.parse(token);
} catch (e) {
  console.error("Token解析失败,请检查localStorage存储格式:", e);
  return; // 解析失败就终止函数
}

3. 请求Body的多余尾逗号

你在body的state: account_state.value,后面加了一个多余的逗号,虽然现代浏览器支持这种写法,但在一些旧环境或者严格模式下可能会抛出语法错误,建议去掉:

body: JSON.stringify({
  city: account_city.value,
  district: account_dis.value,
  state: account_state.value // 去掉最后一个逗号
})

4. 缺失的关键请求头与错误处理

Fetch API只有在网络错误时才会触发reject,像401(令牌无效)、404这类HTTP错误码不会自动进入catch块,而且你还漏掉了告诉服务器请求体是JSON格式的关键头:

修正后的完整代码

function myfun(){
  // 处理token获取与解析
  let token = localStorage.getItem("token");
  try {
    token = JSON.parse(token);
  } catch (e) {
    console.error("Token解析失败:", e);
    return;
  }

  // 确保url变量已正确定义
  const url = "你的API实际地址"; // 替换成真实的API URL

  // 确保DOM元素存在(根据实际页面结构调整选择器)
  const account_city = document.getElementById("account_city");
  const account_dis = document.getElementById("account_dis");
  const account_state = document.getElementById("account_state");

  if (!account_city || !account_dis || !account_state) {
    console.error("无法找到表单元素,请检查DOM结构");
    return;
  }

  fetch(url, {
    method: 'POST',
    headers: {
      "Authorization": `Bearer ${token}`,
      "Content-Type": "application/json" // 必须添加这个头,服务器才能正确解析JSON
    },
    body: JSON.stringify({
      city: account_city.value,
      district: account_dis.value,
      state: account_state.value
    })
  })
  .then((res) => {
    // 手动检查HTTP响应状态
    if (!res.ok) {
      throw new Error(`请求失败!状态码: ${res.status}`);
    }
    return res.json();
  })
  .then(data => console.log("请求成功返回数据:", data))
  .catch(err => console.error("请求出错:", err));
}

最后再确认两个细节:

  • 确保account_city等变量确实指向了页面上的DOM元素,比如通过id或其他选择器正确获取,不然会出现value属性不存在的错误。
  • 检查你的token是否有效,有没有过期——如果服务器返回401错误,大概率是令牌本身的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:24:45