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