我需要使用foursquare API来搜索场地。当然它是跨域的。
它在Firefox中没有任何问题,但在Internet Explorer中(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中,它会在控制台上登录:
No Transport
Error
Error
我该怎么办?
答案 0 :(得分:263)
我在Windows Mobile 7上测试了这个。
花了很多时间来理解之后,我终于找到了这个:
http://bugs.jquery.com/ticket/10660
解决方案很简单,只需设置:
$.support.cors = true;
和Ajax跨域请求将起作用!
答案 1 :(得分:13)
jQuery.support.cors = true;
$.ajax({
crossDomain: true,
url: "",
type: "POST",
dataType: "xml",
data: soapMessage,
});
您需要将跨域值设为true
答案 2 :(得分:7)
这个问题一直困扰着我。作为一种解决方法,我使用位于同一站点上的代理脚本。这样的脚本只是执行服务器到服务器的非ajax HTTP请求(想想curl和WinHttp.WinHttpRequest)并将状态和数据传递回调用者。它可以工作,但显然效率不高,因为它必须执行两个HTTP请求。
在我的情况下,解决方案是上述所有内容的组合加上'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:*”标题。
答案 3 :(得分:6)
试试这个解决方案:
https://stackoverflow.com/a/14463975/237091
或者,只需在包含jquery之后立即将此代码放入HTML中。
<!--[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]-->
答案 4 :(得分:0)
我刚刚更改了jquery版本并替换了CDN链接,它起作用了!如果crossDomain:true
和$.support.cors
= true不起作用,请执行此操作。
<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>