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
相关产品推荐
相关产品推荐

