XMLHttpRequest调用Discord Webhook无响应,求排查方案
问题
我编写了一段通过XMLHttpRequest发送请求至Discord Webhook的代码,目的是将客户联系表单的内容以嵌入消息形式发送至Discord频道。表单变量值已正确获取,控制台无报错且输出的参数格式正确,但Discord始终未收到消息。
代码片段
<script> function sendMessage() { var request = new XMLHttpRequest(); var uname = document.getElementById("name").value; var mail = document.getElementById("emailAddress").value; var msg = document.getElementById("message").value; request.open("POST", "URL"); request.setRequestHeader('Content-type', 'application/json'); var params = { username: "Support", embeds:[{"color": 16711680,"title":"Benutzer: " + uname, "description":"Schreibt: " + msg + " Email: " + mail, "timestamp": new Date()}], } console.log(JSON.stringify(params)); request.send(JSON.stringify(params)); } </script>
控制台输出
{"username":"Support","content":"Schreibt: Test Email: Test@test.com","embeds":[{"color":16711680,"title":"Benutzer: Test","description":"Schreibt: Test Email: Test@test.com","timestamp":"2022-11-30T10:32:59.001Z"}]}
可能的问题及解决办法
- Webhook URL无效:代码中的
"URL"是占位符,必须替换为Discord频道生成的有效Webhook链接。如果URL已过期、对应的频道被删除,或者因泄露被Discord封禁,都会导致请求失败。建议重新生成一个Webhook URL测试。 - 浏览器CORS限制:Discord Webhook接口不支持前端直接跨域请求,浏览器会自动拦截这类请求(可能不会在控制台显示明显报错,但实际请求未到达Discord)。解决办法是通过后端服务转发请求:前端将表单数据发送到自己的后端接口,再由后端发起请求到Discord Webhook。
- 请求格式细节问题:虽然控制台输出看起来正常,但仍有几个细节需要检查:
- 代码中
params对象末尾的多余逗号(}]},)可能导致部分解析器报错,建议删除; - 手动格式化
timestamp为ISO 8601格式,替换new Date()为new Date().toISOString(),确保符合Discord要求; - 检查
embeds结构是否完整,比如description字段是否过长(Discord对嵌入内容有字符数限制)。
- 代码中
- 未捕获请求错误:给XMLHttpRequest添加状态监听,查看请求的响应状态码和内容,能直接定位问题:
request.onload = function() { console.log("请求状态码:", this.status); console.log("Discord响应:", this.responseText); }; request.onerror = function() { console.log("请求发送失败"); };
常见状态码:401(无效Webhook URL)、403(请求被封禁)、400(请求格式错误)、429(请求频率超限)。
- Discord限流或延迟:短时间内发送过多请求会触发Discord的限流机制,此时会返回429状态码。可以暂停请求几分钟后再试,避免重复提交。
内容的提问来源于stack exchange,提问作者Sven Bledt
相关产品推荐
相关产品推荐

