【问题标题】:Is there any way to gain access to this JSON feed purely from a browser client?有什么方法可以纯粹从浏览器客户端访问这个 JSON 提要?
【发布时间】:2015-12-31 04:22:58
【问题描述】:

我想为 last.fm 创建一个客户端。我的音乐“电台”提要在这里,采用 JSON 格式:http://www.last.fm/player/station/user/skeftomai/mix

但是,当我尝试通过 $.getJSON() 访问它时,我得到了

请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://my.exampledomain.com' 因此不允许访问。

很遗憾,我们在 last.fm 结束时遇到了 CORS 问题。我想解决这个问题。以下是我尝试过的一些事情:

  1. AJAX。这会失败并出现 Access-Control-Allow-Origin 错误。
  2. 一个 iframe,其中 document.domain 设置为“www.last.fm”或“last.fm”。这会因 SAMEORIGIN iframe 错误而失败。
  3. JSONP。很遗憾,此提要似乎不支持 JSONP。
  4. 一个 <script> 标记,其中 src 指向提要 link。不幸的是,$('#scriptTagId').html() 是空的。
  5. 闪光。但不幸的是,他们遇到了同样的跨域问题。
  6. Java 小程序。太重了,可能每个人都没有安装JVM,可能会遇到同样的跨域问题。

我很确定我可以使用 Web 代理,客户端利用服务器大小的代理来检索提要……但我真的非常希望这是一个没有服务器的纯客户端应用程序-边。我想在 CDN(S3 + Cloudfront)上托管它。

有没有办法解决这个问题?

【问题讨论】:

  • 为什么我被否决了?这真的是一个糟糕的问题吗?还是题外话?我只是想找到解决这个问题的方法,也许有人有一些可行的疯狂想法。
  • 可能缺乏研究,但这没有意义,因为您已经列出了所有可能的解决方法。
  • 是的,我做了很多研究和实验。我来这里是最后的手段,以确保我没有错过任何东西。
  • 我仍然不知道为什么我被否决了。显然,我从帖子中做了很多研究。 YQL 似乎是唯一的答案,直到我在这里发帖才知道。没有必要投反对票。
  • 我不会担心的。他们可能早已不复存在,不太可能收到您的评论通知。

标签: javascript json ajax cross-domain cors


【解决方案1】:

不,仅使用浏览器无法解决您的要求。如果第 3 方站点不支持 CORS 或 JSONP,除非您控制第 3 方站点或可以使用您自己的服务器(或任何第 3 方代理,如 YQL)来获取数据,否则您将别无选择。

这里是 YQL:

$.getJSON('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%3D\'http%3A%2F%2Fwww.last.fm%2Fplayer%2Fstation%2Fuser%2Fskeftomai%2Fmix\'&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=?', function (response) {
    console.log(response.query.results.json);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

【讨论】:

  • 这就是我一直在寻找的答案!谢谢!现在我不必为一个小脚本搭建服务器。太棒了。
  • 如果您想玩弄查询或进行更多操作,请使用控制台:clicky me! 当我将其复制到 javascript 时,我只需将 callback=callback 更改为 callback=?。跨度>
  • 感谢凯文的帮助!
猜你喜欢
  • 2017-02-13
  • 2017-09-13
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 2014-02-18
相关资源
最近更新 更多