在localhost上运行Javascript API跨域问题

时间:2012-06-07 19:25:35

标签: javascript jquery cross-domain disqus

我正在尝试构建一个页面,其中显示了一些我的博客帖子的链接,以及每个链接旁边的小气泡以及该帖子的评论计数。认为最简单的方法是使用disqus在其开发文档中讨论的“Javascript public facing 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()加载它。

我已将localhost和127.0.0.1添加到Disqus API中的“与我的公钥相关联的域名”设置。

4 个答案:

答案 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(然后您可以根据需要设置样式)。