我正在使用jQuery(1.7.0)对Spotify进行json / ajax调用。以下代码在Chrome和Firefox中运行良好,但在IE中导致错误(错误:访问被拒绝。)。
$.ajax({
url: 'http://ws.spotify.com/lookup/1/.json',
type: 'GET',
dataType: 'json',
cache: true,
data: {
uri: "someartist",
extras: "album"
},
success: successfn,
error:function(xhr, status, errorThrown) {
alert("networking error: "+errorThrown+'\n'+status+'\n'+xhr.statusText);
}
});
在Chrome和FF中调用成功函数,但在IE中使用上述消息调用错误函数。我把cors设为true:jQuery.support.cors = true;
。
它可以在本地和我的服务器上运行Chrome和FF,它可以在本地IE中运行,但不能在服务器上运行。更改cache: false
会导致spotify结束时出现问题 - 不会对其他参数进行排序,因此我收到“错误请求”错误。
感谢任何指针。
由于
的Abo
答案 0 :(得分:4)
您依靠spotify网址在其标头中提供Access-Control-Allow-Origin:*
,以允许来自所有域的跨域请求。但是,Internet Explorer不支持此功能,因此它会拒绝访问。
access-control-allow-origin解释道。 (TLDR:服务器可能允许在其标头中使用跨域ajax)
如果你需要在IE中工作,你可以使用spotify的JSONP API,如果他们有一个或在flash中发出AJAX请求,它可以在所有浏览器中运行并将请求响应数据传递给你的javascript。
答案 1 :(得分:2)
关于使用jsonp的上述答案是正确的;我想补充一下:
不要设置
jquery.support.cors = true;
我不确定为什么这么多问题开头说他们采取了这一步骤。读取此属性是为了确定浏览器是否支持CORS。如果你有不同的了解,你应该只覆盖它,根据我的经验,它对所有主流浏览器都是准确的。将其设置为true不会使浏览器使用CORS,它只会拒绝CORS将失败的信息。
答案 2 :(得分:0)
你能给出一个返回数据的例子吗?
>在/ guess /,它或者与文件名“.json”有关,或者返回的JSON有一些奇怪的东西。答案 3 :(得分:0)
我很惊讶这适用于Chrome或Firefox。您应该无法运行跨域JSON请求。
如果Spotify API支持它,您应该使用JSONP来访问其他域中的资源。
答案 4 :(得分:0)
我认为这不适用于FF。您无法进行跨域Ajax调用。所以当你说它在FF中有效时,我不确定会发生什么。但我只是尝试了FF中的以下内容,我得到了错误。所以你所能做的就是在服务器端进行调用,然后将结果包含在你的页面中。