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

获取数据后通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:57:20