2

我正在尝试构建一个页面,显示指向我的一堆博客文章的链接,并在每个链接旁边有一个小气泡,其中包含该文章的评论数。认为最简单的方法是使用 disqus 在他们的开发文档中谈到的“面向公众的 JavaScript API”。

如果我在浏览器中访问此链接,我会得到我正在寻找的 JSON:

https://disqus.com/api/3.0/threads/details.json?forum=BLOG_FORUM&thread:ident=BLOG_THREAD&api_key=PUBLIC_API_KEY

但是,当我尝试从 jQuery 加载它时,它给了我可怕的 XMLHttpRequest cannot load: Origin is not allowed by Access-Control-Allow-Origin。

我尝试使用 $.getJSON() 和 $("#div").load() 来加载它。

我已将 localhost 和 127.0.0.1 添加到 Disqus API 中的“链接到我的公钥的域”设置中。

4

4 回答 4

3

要在客户端使用此 API,您需要执行 JSONP 请求。事实上的标准是指定函数名称的回调参数。Disqus 还需要更改.json.jsonp With jQuery.getJSON,然后您可以添加&callback=?,jQuery 将从那里获取它。

于 2012-06-07T22:26:04.050 回答
3

您不能在响应标头中添加“localhost”作为 Origin 条目。这是因为CORS的 JavaScript 安全规范

Access-Control-Allow-Origin可以设置为*以允许任何网站通过 XMLHTTPRequest/AJAX 访问数据,但您不能将其设置为“localhost”

解决该问题的可能解决方案是:在公共域/位置托管发出请求的页面,并在响应标头Access-Control-Allow-Origin中包含主机名。

正如“@Matthew Flaschen”所提到的,您可以使用 JSONP 请求&callback=?来完成此操作

或者作为最后的手段,<script>通过在“src”属性中指定 URL 来加载 JSON 结果以及标签中的脚本并访问 JSON 数据,
例如:修改服务器端的结果以包含一项<variable_name>={JSONObject}技术并在脚本加载时,可以通过该变量访问数据
Some People got the same kind of issue here

仍然无法弄清楚为什么浏览器拒绝Access-Control-Allow-Origin=localhost但他们支持Access-Control-Allow-Origin=*(意味着任何公共网站都可以访问数据但是............ )这件事可能有一些阴谋(跟踪访问数据的网站)

于 2012-09-29T12:39:35.640 回答
0

实际上,您可以按照这些说明,通过使用脚本和数据驱动属性来做到这一点。您只需加载 Disqus count.js 脚本,然后使用data-属性。

编辑:您可以将其配置为仅在此处显示整数(然后您可以根据需要设置样式)。

于 2012-06-07T19:32:40.400 回答
0

我认为您只需要在顶部使用此标题:

<?php header('Access-Control-Allow-Origin: http://disqus.com'); ?>
于 2012-09-29T10:26:30.597 回答