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

时间:2011-11-13 12:24:20

标签: ajax internet-explorer jquery

我正在使用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

5 个答案:

答案 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将失败的信息。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

另见:No response from jQuery ajax call

答案 4 :(得分:0)

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

http://jsfiddle.net/2XWGn/