Ошибка «Нет транспорта» с вызовом jQuery ajax в IE - PullRequest
109 голосов
/ 06 февраля 2012

Мне нужно использовать 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

Что мне делать?

Ответы [ 4 ]

263 голосов
/ 25 июня 2012

Я протестировал это на Windows Mobile 7.

После МНОГО времени, потраченного на понимание, я наконец-то нашел это:

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

Решение простое,просто установите это:

$.support.cors = true;

и междоменные запросы Ajax будут работать!

13 голосов
/ 25 февраля 2013
jQuery.support.cors = true;

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

вам нужно установить значение междоменного домена в true

7 голосов
/ 21 ноября 2014

Эта проблема беспокоила меня в течение некоторого времени. В качестве обходного пути я использую прокси-скрипты, расположенные на том же сайте. Такие сценарии просто выполняют не-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': '*'
  },
  ...
});

Веб-служба, отвечающая на эти вызовы, также отвечает заголовком «Access-Control-Allow-Origin: *».

6 голосов
/ 06 марта 2015

Попробуйте это решение:

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]-->
...