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

使用fetch或jQuery调用ServiceDesk Plus API失败返回404错误

问题根因

你的请求失败是几个配置错误叠加导致的,逐个列出来:

  • mode: "no-cors"配置完全误用。该模式下浏览器会禁止前端自定义设置绝大多数请求头,你配置的authtoken认证头根本不会被发送,同时该模式下返回的是不透明响应,前端完全无法读取响应内容,根本拿不到接口返回数据。
  • 请求URL的占位符没有替换。你写的路径里{2}的大括号是接口文档用来标记参数占位符的符号,不是URL的一部分,大括号会被浏览器自动URL编码为%7B和%7D,和你报错里显示的请求地址一致,服务端识别不到这个路径自然返回404。
  • 手动硬编码Cookie完全没必要。Postman、PowerShell不受浏览器安全策略限制可以手动带Cookie,但浏览器环境下手动设置Cookie头会被直接拦截,且你复制的是Postman临时生成的会话Cookie,本身有效期极短,正常请求需要携带Cookie时开credentials配置即可,浏览器会自动携带和管理对应域名的Cookie。
  • 运行环境的策略差异:Postman、PowerShell发请求不受浏览器同源策略约束,所以能调通;但前端页面在浏览器里运行会受同源策略限制,需要服务端配置对应跨域允许规则才能正常请求。
修复后代码
const myHeaders = new Headers();
myHeaders.append("authtoken", "C9BE41C7-F13F-4AB8-9A7B-A16650998909");

const requestOptions = {
  method: 'GET',
  headers: myHeaders,
  redirect: 'follow',
  // 删除错误的no-cors配置,使用默认cors模式
  credentials: 'include' // 需要携带认证Cookie时开启该配置即可,无需手动写Cookie头
};

// 去掉URL里包裹ID的大括号,直接传实际请求ID
fetch("https://beta.servicedeskplus.com/api/v3/requests/2", requestOptions)
  .then(response => {
    if (!response.ok) throw new Error(`请求异常,状态码:${response.status}`);
    return response.json();
  })
  .then(result => console.log('请求成功:', result))
  .catch(error => console.log('请求失败:', error));
后续排查提示
  • 如果改完代码后出现跨域报错,直接登录ServiceDesk Plus Beta版的管理后台,在API配置板块把你本地Live Server的运行地址(通常是http://127.0.0.1:5500)添加到跨域允许来源列表即可。
  • 不要直接照搬Postman生成的浏览器端请求代码,Postman导出的代码包含大量仅适配Postman环境的临时参数(比如临时会话Cookie),直接放到浏览器环境运行大概率会被安全策略拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:18:19