web-dev-qa-db-ja.com

IEでのjQuery ajax呼び出しによる「トランスポートなし」エラー

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

私は何をすべきか?

110
Sang

これをWindows Mobile 7でテストしました。

理解するのに多くの時間を費やした後、私は最終的にこれを見つけました:

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

ソリューションはシンプルで、これを設定するだけです:

$.support.cors = true;

そして、Ajaxクロスドメインリクエストが機能します!

264
Magico
jQuery.support.cors = true;

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

クロスドメイン値をtrueにする必要があります

13
amit thakur

この問題はしばらくの間私を悩ませてきました。回避策として、同じサイトにあるプロキシスクリプトを使用します。このようなスクリプトは、サーバー間の非ajax HTTPリクエスト(curlおよびWinHttp.WinHttpRequestを考えてください)を実行し、ステータスとデータを呼び出し元に返します。動作しますが、2つの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:*」ヘッダーで応答します。

7
Alex D

この解決策を試してください:

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]-->
6
Scott Stafford