在IE中调用jQuery ajax调用“无传输”错误

我需要使用四方API来search场地。 当然这是跨域的。

它在Firefox中没有任何问题,但在Internet Explorer(我已经testing过7,8,9)。

我的JavaScript代码如下所示:

searchVenues: function(searchQuery) { $.ajax({ url: 'https://api.foursquare.com/v2/venues/search', data: { sw: bound_south_west, ne: bound_north_east, query: searchQuery.query, oauth_token: FSQ_OAUTH_TOKEN, limit: 25, intent: 'browse', v: 20120206 }, cache: false, dataType: 'json', success: function(data) { displayResults(data, searchQuery.query); }, error: function(xhr, status, errorThrown) { console.log(errorThrown+'\n'+status+'\n'+xhr.statusText); } }); } 

在Firefox中,它完美地显示收到的数据。 在Internet Explorer中,它在控制台上login:

 No Transport Error Error 

我该怎么办?

我在Windows Mobile 7上testing了这个。

花了很多时间了解之后,终于find了这个:

http://bugs.jquery.com/ticket/10660

解决scheme很简单,只需设置:

 $.support.cors = true; 

和Ajax跨域请求将工作!

 jQuery.support.cors = true; $.ajax({ crossDomain: true, url: "", type: "POST", dataType: "xml", data: soapMessage, }); 

您需要将跨域值设置为true

这个问题一直困扰我一段时间。 作为解决方法,我使用位于同一站点上的代理脚本。 这样的脚本只是执行服务器到服务器的非ajax HTTP请求(想到curl和WinHttp.WinHttpRequest)并将状态和数据传回给调用者。 它的工作,但显然不是很有效,因为它必须执行两个HTTP请求。

就我而言,解决scheme是上述所有内容的组合,加上“Access-Control-Allow-Origin”标题。

 $.support.cors = true; // this must precede $.ajax({}) configuration $.ajax({ crossDomain: true, // added in jQuery 1.5 headers: { 'Access-Control-Allow-Origin': '*' }, ... }); 

回答这些调用的Web服务也以“Access-Control-Allow-Origin:*”标题响应。

试试这个解决scheme

https://stackoverflow.com/a/14463975/237091

或者,简单地把这个代码放在你的HTML包含jquery后。

 <!--[if lte IE 9]> <script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script> <![endif]-->