获取数据后通过Discord Webhook发送遇问题:先undefined后400错误求修复
问题
尝试获取数据后通过Discord Webhook发送,但Webhook在请求完成数据获取前就已发送,返回undefined。于是将发送逻辑放入100ms延迟的setTimeout函数中,现在却出现400响应码,该如何修复?
代码示例
$.getJSON('返回JSON数据的链接', (data) => { info = JSON.stringify(data, null, 2) }); setTimeout(() => { const request = new XMLHttpRequest(); request.open("POST", "Discord Webhook链接") request.setRequestHeader('Content-type', 'application/json'); const params = { username: "Info", avatar_url: "", content: `${info}` } request.send(JSON.stringify(params)); }, 100);
补充说明:已确认超时函数能让数据加载完成(用console.log()测试过),但发送请求时仍抛出400响应。
解决方案
1. 彻底解决异步顺序问题(替代setTimeout)
不要依赖setTimeout这种不可靠的延迟方式,直接将Webhook发送逻辑放入$.getJSON的回调函数内,确保数据完全获取后再执行发送操作:
$.getJSON('返回JSON数据的链接', (data) => { const info = JSON.stringify(data, null, 2); // 数据获取完成后立即发送Webhook const request = new XMLHttpRequest(); request.open("POST", "Discord Webhook链接"); request.setRequestHeader('Content-type', 'application/json'); const params = { username: "Info", avatar_url: "", content: info // 无需模板字符串,直接使用变量即可 }; request.send(JSON.stringify(params)); });
2. 排查400错误的核心原因
400响应表示请求格式不符合Discord的校验规则,常见修复方向:
- content字段长度超限:Discord Webhook的
content字段最大允许2000字符,若info内容过长会触发错误,可截断处理:content: info.substring(0, 1997) + '...' // 预留3个字符添加省略号 - 特殊字符转义问题:极端特殊字符可能导致JSON格式异常,改用
fetchAPI可自动处理部分格式问题:fetch("Discord Webhook链接", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username: "Info", avatar_url: "", content: info }) }); - 无效字段值:
avatar_url为空字符串可能触发校验失败,可直接移除该字段,或填入有效的图片URL。
内容的提问来源于stack exchange,提问作者killrebeest
相关产品推荐
相关产品推荐

