Ошибка "Нет транспорта" w/jQuery ajax-вызов в IE
Мне нужно использовать API-интерфейс foursquare для поиска мест. Конечно, это кросс-домен.
У него нет никаких проблем в 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
Что мне делать?
Ответы
Ответ 1
Я тестировал это на Windows Mobile 7.
После того, как прошло много времени, чтобы понять, я наконец нашел это:
http://bugs.jquery.com/ticket/10660
Решение прост, просто установите это:
$.support.cors = true;
и запросы на перекрестный домен Ajax будут работать!
Ответ 2
jQuery.support.cors = true;
$.ajax({
crossDomain: true,
url: "",
type: "POST",
dataType: "xml",
data: soapMessage,
});
вам нужно сделать значение кросс-домена истинным
Ответ 3
Эта проблема несколько раз подтачивала меня. В качестве обходного пути я использую прокси-скрипты, расположенные на одном сайте. Такие скрипты просто выполняют HTTP-запрос от сервера к серверу, а не 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': '*'
},
...
});
Веб-служба, которая отвечает на эти вызовы, также отвечает заголовком "Access-Control-Allow-Origin: *".
Ответ 4
Попробуйте это решение:
fooobar.com/info/49086/...
Или просто поместите этот код в свой 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]-->