jQuery和带有json的Ajax—在IE中失败

jQuery和带有json的Ajax—在IE中失败,ajax,internet-explorer,jquery,Ajax,Internet Explorer,Jquery,我正在使用jQuery(1.7.0)对Spotify进行json/ajax调用。以下代码在Chrome和Firefox中运行良好,但在IE中导致错误(错误:访问被拒绝) 在Chrome和FF中调用success函数,但在IE中调用error函数时会显示上述消息。我已经将cors设置为true:jQuery.support.cors=true 它可以在Chrome和FF上本地工作,也可以在我的服务器上工作,可以在IE上本地工作,但不能在服务器上工作。更改cache:false会导致spotify端

我正在使用jQuery(1.7.0)对Spotify进行json/ajax调用。以下代码在Chrome和Firefox中运行良好,但在IE中导致错误(错误:访问被拒绝)

在Chrome和FF中调用success函数,但在IE中调用error函数时会显示上述消息。我已经将cors设置为true:
jQuery.support.cors=true

它可以在Chrome和FF上本地工作,也可以在我的服务器上工作,可以在IE上本地工作,但不能在服务器上工作。更改
cache:false
会导致spotify端出现问题-不会生成其他参数,因此我会收到一个“错误请求”错误

谢谢你的指点

谢谢


Abo

你能举一个返回数据的例子吗


在a/guess/中,它要么与文件名“.json”有关,要么返回的json有一些奇怪的地方。

您能给出一个返回数据的示例吗


在a/guess/中,它要么与文件名“.json”有关,要么返回的json有点奇怪。

我很惊讶这在Chrome或Firefox上能起作用。您不应该能够运行跨域JSON请求

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


另请参见:

我很惊讶这能在Chrome或Firefox上运行。您不应该能够运行跨域JSON请求

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


另请参见:

我看不到这在FF中起作用。您不能进行跨域Ajax调用。所以当你说它在FF中有效时,我不确定发生了什么。但我只是在FF中尝试了以下操作,结果却出现了错误。因此,您所能做的就是在服务器端进行调用,然后将结果包含在页面中


我认为这在FF中不起作用。您不能进行跨域Ajax调用。所以当你说它在FF中有效时,我不确定发生了什么。但我只是在FF中尝试了以下操作,结果却出现了错误。因此,您所能做的就是在服务器端进行调用,然后将结果包含在页面中


您依赖spotify url在其标题中提供
访问控制允许来源:
以允许来自所有域的跨域请求。但是Internet explorer不支持此功能,因此它拒绝访问

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


如果你需要在IE中使用它,你可以使用spotify的JSONPAPI(如果他们有),或者在flash中发出AJAX请求,它适用于所有浏览器,并将请求响应数据传递给您的javascript。

您依赖spotify url提供
访问控制允许源代码:
,以允许来自所有域的跨域请求。但是Internet explorer不支持此功能,因此它拒绝访问

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


如果你需要在IE中使用它,你可以使用spotify的JSONP API(如果他们有),或者在flash中发出AJAX请求,这在所有浏览器中都可以工作,并将请求响应数据传递给你的javascript。

以上关于使用JSONP的回答是正确的;我想补充:

不要设置

jquery.support.cors = true;
我不知道为什么这么多问题一开始就说他们采取了这一步骤。读取此属性是为了确定浏览器是否支持CORS。只有在您知道不同的情况下才应该覆盖它,根据我的经验,它适用于所有主要浏览器。将其设置为true不会使浏览器能够使用CORS,它只是拒绝您提供CORS将失败的信息


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

不要设置

jquery.support.cors = true;
我不知道为什么这么多问题一开始就说他们采取了这一步骤。读取此属性是为了确定浏览器是否支持CORS。只有在您知道不同的情况下才应该覆盖它,根据我的经验,它适用于所有主要浏览器。将其设置为true不会使浏览器能够使用CORS,它只是拒绝您提供CORS将失败的信息


谢谢你的帮助。Spotify似乎不支持jsonp。大概我可以编写一段php,通过curl获取数据,然后在同一个域上返回数据?php将使我能够实现这一点。Spotify似乎不支持jsonp。想必我可以编写一段php,通过curl获取数据,然后在同一个域上返回数据?我可以使用php吗?这真的很有用!谢谢编写一些php来使用curl获取数据,然后将其传递给我的javascript是否简单?我从未使用过flash,我也不认为spotify有jsonp接口。你不需要使用flash(除了在你的页面上嵌入.swf),你使用flXHR的方式与使用jsXHR的方式几乎相同,没有跨浏览器的差异。阅读他们页面上的一些文档,了解API是如何使用的。是的,您可以使用服务器作为代理来检索数据,因为它位于同一个域中,但这会给您的服务器带来不必要的负载。您使用服务器的方式:1。对服务器2进行ajax调用。您的服务器使用curl从spotify 3获取数据。您的服务器将数据返回给browseryep——这就是我所认为的——应该很简单吗?是的,但flXHR甚至有as。我建议这样做,因为在代理解决方案中,开销是不可忽略的:每个请求将发生2个请求。这非常有用!谢谢编写一些php来使用curl获取数据,然后将其传递给我的javascript是否简单?我从未使用过flash,我也不认为spotify有jsonp接口。你不需要使用flash(除了在你的页面上嵌入.swf),你使用flXHR的方式与使用jsXHR的方式几乎相同,没有跨浏览器的差异。阅读他们页面上的一些文档,了解API是如何使用的。是的,您可以使用服务器作为代理来检索数据