我正在尝试构建一个页面,显示指向我的一堆博客文章的链接,并在每个链接旁边有一个小气泡,其中包含该帖子的评论计数。 认为最简单的方法是使用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无法加载:Access-Control-Allow-Origin不允许Origin。
我尝试使用 $.getJSON() 和 $("#div").load() 来加载它。
我已将本地主机和 127.0.0.1 添加到 Disqus API 中的"链接到我的公钥的域"设置中。
要在客户端使用此 API,您需要执行 JSONP 请求。事实上的标准是指定函数名称的回调参数。 Disqus还需要将.json
更改为.jsonp
使用jQuery.getJSON
,然后您只需添加&callback=?
,jQuery将从那里获取它。
不能在响应标头中添加"localhost"作为源条目。这是因为 CORS
的 JavaScript 安全规范
Access-Control-Allow-Origin 可以设置为 * 以允许任何网站通过 XMLHTTPRequest/AJAX 访问数据,但您不能将其设置为"localhost"。
解决此问题的可能解决方案是:在公共域/位置托管发出请求的页面,并在响应标头 Access-Control-Allow-Origin 中包含主机名。
正如"@Matthew Flaschen"所提到的,您可以将JSONP请求与&callback=?
一起使用来完成此操作
或者,作为最后的手段,通过在"src"属性中指定 URL 来加载 JSON 结果以及 <script>
标记中的脚本,并访问 JSON 数据
例如:在服务器端修改结果以包含<variable_name>={JSONObject}
技术,并且随着脚本加载,可以通过该变量访问数据
有些人在这里遇到了同样的问题
仍然无法弄清楚为什么浏览器拒绝Access-Control-Allow-Origin=localhost
但它们支持Access-Control-Allow-Origin=*
(意味着任何公共网站都可以访问数据,但是......这件事可能有一些阴谋(跟踪访问数据的网站)
,您可以按照这些说明仅使用脚本和数据驱动的属性来执行此操作。 您只需加载 Disqus 计数.js脚本,然后使用data-
属性。
编辑:您可以将其配置为仅在此处显示整数(然后您可以根据需要设置样式)。
我认为您只需要顶部的标题:
<?php header('Access-Control-Allow-Origin: http://disqus.com'); ?>