【问题标题】:Cross Domain Requests Not Working With SoundCloud in Safari跨域请求无法在 Safari 中使用 SoundCloud
【发布时间】:2014-01-09 11:47:43
【问题描述】:

我根本无法在 Safari 中获得 json 响应,调用 SoundCloud 的 API。

var inputSet={url:setUrl},
    clientId={client_id:client_id};
$.getJSON( "https://api.soundcloud.com/resolve.json", $.extend(inputSet, clientId), function( data ) {
console.log(data);
});

这会在 Safari 中返回 Origin Access-Control 错误,但在 Chrome 中不会。 CORS 根本不工作。

看到 CORS not working at all,实现了“工作”答案,完全相同的错误,只有 Safari。

添加回调参数不会返回该错误,但会返回 ajax 错误 "parsererror" SyntaxError {} 我认为是由于响应仍然是 json 而不是 jsonp。这在任一浏览器中都不起作用。

就目前而言,我无法让这个跨域请求在 chrome 中工作,即使文档

https://developers.soundcloud.com/docs#crossdomain

说我可以。

Safari 网络选项卡:

Safari 响应:

[Error] Failed to load resource: Origin https://seam.li is not allowed by Access-Control-Allow-Origin. (17235000.json, line 0)
[Error] XMLHttpRequest cannot load https://api.soundcloud.com/playlists/17235000.json?client_id=CLIENT_ID. Origin https://seam.li is not allowed by Access-Control-Allow-Origin. (seam.li, line 0)

链接页面在浏览器中加载正常。

【问题讨论】:

  • Chrome 中的“网络”标签显示什么?
  • 不确定您是否指的是 Safari,因为 Chrome 是可行的,但 api 调用在 Chrome 上返回 200、302 或 304
  • 更新了 Safari Network 的图片
  • 你能显示详细信息(例如响应)吗?
  • 响应更新

标签: javascript jquery ajax json soundcloud


【解决方案1】:

使用其他 URL 似乎可以正常工作。问题在于/resolve.json,它使用 302 重定向将您发送到正确的 API URL,但它与 Safari 不兼容。

根据 SoundCloud API 文档:

当您只知道 SoundCloud.com URL 时,解析资源允许您查找和访问 API 资源。

如果您不需要此功能,我建议直接使用 URL。这是一个工作示例。

$.getJSON("https://api.soundcloud.com/playlists/17235000.json?client_id=CLIENT_ID", 
    function( data ) {
        console.log(data);
});

【讨论】:

  • 遗憾的是,我确实需要解析功能。这依赖于用户将 url 输入到 SoundCloud 集,然后服务播放它。遗憾的是,我无法合理地要求他们输入播放列表的 api url :(
  • 您必须使用 CORS 代理
  • 嗯,我会调查的
  • 对设置一个有什么建议吗?
  • @AndreasHultgren 请记住,JSONP 也有它的缺点。由于 JSONP 是 JavaScript 包装器,您可能会遇到非法字符问题stackoverflow.com/questions/28094214/…
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2019-10-21
  • 2016-08-23
  • 2016-06-19
  • 1970-01-01
  • 2015-04-22
相关资源
最近更新 更多