使用json的jQuery和Ajax – 在IE中失败

我正在使用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结束时出现问题 – 不会对其他参数进行排序,因此出现“错误请求”错误。

感谢任何指针。

谢谢

阿博

您依靠spotify url在其标头中提供Access-Control-Allow-Origin:*以允许来自所有域的跨域请求。 但Internet Explorer不支持此function,因此它拒绝访问。

access-control-allow-origin解释。 (TLDR:服务器可能允许在其标头中使用跨域ajax)

如果你需要在IE中使用它,你可以使用spotify的JSONP API,如果他们有一个或在flash中发出AJAX请求,它可以在所有浏览器中运行并将请求响应数据传递给你的javascript。

关于使用jsonp的上述答案是正确的; 我想补充一下:

不要设置

 jquery.support.cors = true; 

我不确定为什么这么多问题开头说他们采取了这一步骤。 读取此属性是为了确定浏览器是否支持CORS。 如果你有不同的了解,你应该只覆盖它,根据我的经验,它对所有主流浏览器都是准确的。 将其设置为true不会使浏览器使用CORS,它只会拒绝CORS将失败的信息。

http://api.jquery.com/jQuery.support/

你能给出一个返回数据的例子吗?

在/ guess /,它或者与文件名“.json”有关,或者返回的JSON有一些奇怪的东西。

我很惊讶这适用于Chrome或Firefox。 您应该无法运行跨域JSON请求。

如果Spotify API支持它,您应该使用JSONP来访问其他域中的资源。

另见: jQuery ajax调用没有响应

我没有看到这在FF工作。 您无法进行跨域Ajax调用。 所以我不确定当你说它在FF中工作时会发生什么。 但我刚刚在FF中尝试了以下内容,我得到了错误。 因此,您所能做的就是在服务器端进行呼叫,然后将结果包含在您的页面中。

http://jsfiddle.net/2XWGn/