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

AJAX POST请求返回405 Method Not Allowed错误如何解决

405错误诱因及修复方案

核心错误点

  • 请求路径不符合Firebase Realtime Database REST API规则:所有写入请求的路径末尾必须携带.json后缀,你当前请求的根路径缺失该后缀,服务端无法匹配POST方法的处理逻辑,直接返回405状态码。
  • 请求头与请求体格式不匹配:你手动设置了Content-Type: application/x-www-form-urlencoded,但实际发送的是JSON.stringify(data)序列化后的JSON格式载荷,头声明和实际内容格式不一致,会触发服务端解析失败。
  • 错误日志无有效排查信息:当前错误分支仅输出固定字符串Error,没有打印状态码、响应正文等关键信息,无法定位具体报错原因。
  • 成功状态判断逻辑冗余矛盾:原判断条件同时写了xhr.status === 200和xhr.status < 300,会导致201(资源创建成功)等正常2xx状态被误判为请求失败。

修复后可运行代码

useEffect(() => {
  if (Object.keys(data).length) {
    let xhr = new XMLHttpRequest()
    // 路径末尾补全要求的.json后缀
    xhr.open('POST', 'https://test-1a68b-default-rtdb.firebaseio.com/.json', true)
    // 修正Content-Type为JSON格式对应的类型
    xhr.setRequestHeader('Content-Type', 'application/json')
    xhr.responseType = 'json'
    xhr.send(JSON.stringify(data))

    xhr.onreadystatechange = function () {
      if (xhr.readyState < 4) {
        console.log('Loading')
      } else if (xhr.readyState === 4) {
        if (xhr.status >= 200 && xhr.status < 300) {
          console.log('Success', xhr.response)
        } else {
          // 打印完整错误信息方便后续排查
          console.log('Request failed, status:', xhr.status, 'response:', xhr.response)
        }
      }
    }
  }
}, [data])

补充说明:如果修复后仍有权限类报错,需要检查对应数据库的安全规则配置,确认是否开放了对应路径的写入权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:42:19