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

我需要使用 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

我该怎么办?

91058 次浏览

I tested this on Windows Mobile 7.

After LOTS of time spent to understand, I finally found this:

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

The Solution is simple, just set this:

$.support.cors = true;

and Ajax cross domain requests will work!

jQuery.support.cors = true;


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

you need to make the cross domain value to true

This problem has been bugging me for some time. As a workaround I use proxy scripts located on the same site. Such scripts simply execute server-to-server non-ajax HTTP request (think of curl and WinHttp.WinHttpRequest) and pass status and data back to the caller. It works, but obviously not very efficient because it has to perform two HTTP requests.

In my case, solution is a combination of all the things described above plus 'Access-Control-Allow-Origin' header.

$.support.cors = true; // this must precede $.ajax({}) configuration


$.ajax({
crossDomain: true, // added in jQuery 1.5
headers: {
'Access-Control-Allow-Origin': '*'
},
...
});

The web service that answers these calls also responds with 'Access-Control-Allow-Origin: *' header.

Try this solution:

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

Or, simply put this code in your HTML right after including 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]-->

I just changed the jquery version and replaced the CDN link and it worked! Just do it if crossDomain:true and $.support.cors = true not work.

<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>