跨域请求在Safari中不使用SoundCloud

Lia*_*low 7 javascript ajax jquery json soundcloud

我只是无法在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);
});
Run Code Online (Sandbox Code Playgroud)

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

Saw CORS根本没有工作,实现了"工作"答案,完全相同的错误,只有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)
Run Code Online (Sandbox Code Playgroud)

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

J.P*_*ong 4

使用其他 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);
});
Run Code Online (Sandbox Code Playgroud)