有什么方法可以完全从浏览器客户端访问这个 JSON 提要吗?
Is there any way to gain access to this JSON feed purely from a browser client?
我想为 last.fm 创建一个客户端。我的音乐 "station" 提要在这里,JSON 格式:http://www.last.fm/player/station/user/skeftomai/mix.
但是,当我尝试通过 $.getJSON()
访问它时,我得到
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://my.exampledomain.com' is therefore not allowed access.
很遗憾,我们在 last.fm 端遇到了 CORS 问题。我想解决这个问题。以下是我尝试过的一些方法:
- AJAX。这失败并出现 Access-Control-Allow-Origin 错误。
- iframe,document.domain 设置为 "www.last.fm" 或 "last.fm"。这失败并出现 SAMEORIGIN iframe 错误。
- JSONP。不幸的是 JSONP 似乎不受此 Feed 的支持。
- A
<script>
标签,src 指向 feed link。不幸的是 $('#scriptTagId').html()
是空的。
- 快闪。但不幸的是遇到了同样的跨源问题。
- Java小程序。太重了,可能大家都没有安装JVM,可能会遇到同样的跨域问题
我相当确定我可以使用 Web 代理,客户端利用服务器大小的代理来检索提要...但我真的非常希望这是一个纯客户端应用程序没有服务器端。我想在 CDN (S3 + Cloudfront) 上托管它。
有什么解决办法吗?
不,您所要求的是无法单独使用浏览器解决的。如果第 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>
我想为 last.fm 创建一个客户端。我的音乐 "station" 提要在这里,JSON 格式:http://www.last.fm/player/station/user/skeftomai/mix.
但是,当我尝试通过 $.getJSON()
访问它时,我得到
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://my.exampledomain.com' is therefore not allowed access.
很遗憾,我们在 last.fm 端遇到了 CORS 问题。我想解决这个问题。以下是我尝试过的一些方法:
- AJAX。这失败并出现 Access-Control-Allow-Origin 错误。
- iframe,document.domain 设置为 "www.last.fm" 或 "last.fm"。这失败并出现 SAMEORIGIN iframe 错误。
- JSONP。不幸的是 JSONP 似乎不受此 Feed 的支持。
- A
<script>
标签,src 指向 feed link。不幸的是$('#scriptTagId').html()
是空的。 - 快闪。但不幸的是遇到了同样的跨源问题。
- Java小程序。太重了,可能大家都没有安装JVM,可能会遇到同样的跨域问题
我相当确定我可以使用 Web 代理,客户端利用服务器大小的代理来检索提要...但我真的非常希望这是一个纯客户端应用程序没有服务器端。我想在 CDN (S3 + Cloudfront) 上托管它。
有什么解决办法吗?
不,您所要求的是无法单独使用浏览器解决的。如果第 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>