Disqus Javascript API 跨域问题 on localhost.



我正在尝试构建一个页面,显示指向我的一堆博客文章的链接,并在每个链接旁边有一个小气泡,其中包含该帖子的评论计数。 认为最简单的方法是使用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'); ?>

相关内容

  • 没有找到相关文章

最新更新