【问题标题】:AJAX requests for JSON/JSONP to Disqus API getting 400 response向 Disqus API 发送 JSON/JSONP 的 AJAX 请求得到 400 响应
【发布时间】:2026-01-30 19:35:01
【问题描述】:

我正在尝试通过 Disqus API 在我的网站/论坛上检索最近的 cmets。当我在地址栏中尝试时,我的请求有效,但是当我尝试使用 JQuery 进行 AJAX 调用时出现 400 错误。

我的 JSON 请求:

$.ajax({
type: 'GET',
url: "https://disqus.com/api/3.0/forums/listPosts.json",
data: { api_key: 'my_public_key', forum : 'my_forum_name'},
cache: false,
dataType: 'json',
success: function (result) {
  console.log("SUCCESS");
}
});

当我尝试上述 JSON 请求时,我在控制台中收到一条错误消息,指示未在服务器响应中设置 Access-Control-Allow-Origin 标头。对我来说,这表明 Disqus 没有设置为支持 CORS 请求,但文档表明 Disqus 支持 JSON 作为请求类型。

我的 JSONP 请求:

$.ajax({
type: 'GET',
url: "https://disqus.com/api/3.0/forums/listPosts.jsonp",
data: { api_key: 'my_public_key', forum : 'my_forum_name'},
cache: false,
dataType: 'jsonp',
success: function (result) {
  console.log("SUCCESS");
}
});

当我根据 Disqus 提供的 tutorial 尝试上述 JSONP 请求时,我仍然收到 400 Bad Request 作为响应。

当我使用同一个开发服务器使用 curl 发出两个请求时,我可以在响应正文中看到正确的 JSON 或 JSONP 格式的响应,尽管标头列出了 400 错误。 (但是,当我在此处突出显示请求时,Chrome 网络选项卡会显示“此请求没有可用的响应数据”——也许我需要在 Chrome 的开发通道上才能看到响应。)

我已经在几个不同的域上尝试了这两个请求,并确保每次我测试请求的域都被 Disqus 列为受信任域,但我不确定这是否重要。

我知道代理可能会解决 JSON 问题,但由于 Disqus 声明它们支持 JSON 和 JSONP 请求,我宁愿不必这样做。我还能尝试什么?

【问题讨论】:

    标签: jquery ajax json jsonp disqus


    【解决方案1】:

    您是否尝试过添加 '?callback=?'到网址?我遇到了类似的情况,但使用了我们无法配置的 API。添加此参数后,我们就能得到正确的响应。

    【讨论】:

    • 您可能希望将此添加为评论而不是答案。它并没有真正具体地回答这个问题。
    【解决方案2】:

    Disqus 中有一个字段用于指定哪些 URL 可以使用您的 Disqus 公钥(disqus.com/api/applications -> 单击您的应用程序 -> 导航到设置选项卡),该字段不同于位于Disqus 管理面板的高级设置。将我网站的 URL 添加到前者解决了这个问题。

    【讨论】: