IEでjQuery ajax呼び出しで 'No Transport'エラーが発生する

私は会場を検索するために四角形の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

私は何をすべきか?

108
これはSO を投稿href="http://stackoverflow.com/questions/5241088/jquery-call-to-webservice-returns-no-transport-error">
追加された 著者 mkozicki,

4 答え

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

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

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

ソリューションは簡単ですが、これを設定してください:

$.support.cors = true;

Ajaxのクロスドメイン要求が機能します!

258
追加された
ありがとう。これを適用した後、statusTextをIE9上で "Error:Access is denied。\ r \ n" として取得しています。どんな推測?ネットワークに取り込まれたものはありません。
追加された 著者 IsmailS,
これはIEのブラウザのために働いていない...誰でも私はIEでそれを働くのを助けることができます
追加された 著者 Rash,
私も同様の問題があります。 IE10では動作しますが、IE8またはIE9では動作しません
追加された 著者 mishka,
HTAの作品
追加された 著者 mplungjan,
私の場合は、この作業のために.ajaxメソッド呼び出しに 'crossDomain:true'を追加する必要がありました。
追加された 著者 Pete Nelson,
私はまた、リクエストされたURLのヘッダをチェックすることを提案します。可能であれば可能です。
追加された 著者 Daenarys,
私はこれがデフォルトで今設定されていると信じています。私のソリューションはXDRリクエスト転送でした。この人気のある回答をご覧ください: stackoverflow.com/a/10232313/217866
追加された 著者 jackocnr,
IE8とIE9で「エラー:アクセスが拒否されました」と表示されています
追加された 著者 Darren Cooney,
受け入れられた答えが実際にIE8またはIE9の問題を解決していないことは少し落胆しています。
追加された 著者 Warren Rumak,
私はまた、 "エラー:アクセスが拒否されました"という私の間違いは、HTTPSコンテンツをHTTPドメインから取得したことでした。あなたのウェブサイトとあなたのajaxターゲットが同じプロトコル(HTTPまたはHTTPSのいずれか)を使用していることを確認してください。
追加された 著者 Torben,
jQuery.support.cors = true;

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

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

13
追加された
@javanna options引数に crossDomain:true を追加しました。
追加された 著者 Chris Marasti-Georg,
あなたの答えと受け入れられたものとの違いは何ですか?あなたの前にかなりの時間が投稿されました。
追加された 著者 javanna,
あなたが間違っていないと cross.c:がデフォルトで行う crossDomain:true の必要はありません。
追加された 著者 Mark Pieszak - DevHelp.Online,
クロスドメインとは何ですか?それはなぜ真実である必要がありますか?
追加された 著者 Aziz Saleh,

この問題は、しばらく私を悩ませています。回避策として、同じサイトにあるプロキシスクリプトを使用します。このようなスクリプトは、サーバー間の非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
追加された
...それでも、これはCORSヘッダーに言及する最初の答えです。容認された解決策は私のために働かなかった。
追加された 著者 seanhodges,
この質問には2年以上の間受け入れられた解決策があります...
追加された 著者 Chris Mukherjee,
私はこれがサービスのweb.configにあるべきだと思います。
追加された 著者 Fjodr,

このソリューションをお試しください:

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>
6
追加された
これは私のために働いた。 Response Content-typeが 'text/plain'であることを確認することに加えて、
追加された 著者 Nikolay Melnikov,
私はjqueryの後でGruntに追加しましたが、今は動作します( npmjs.com/package/ jquery-ajax-transport-xdomainrequest )。
追加された 著者 tobias47n9e,
私はAndroidでChrome(おそらくAndroid Browser)で発生する同じ問題を発見しました。したがって、すべてのブラウザがこのスクリプトを使用できるように条件付きコメントを残しておきましょう。 (プロジェクトのホームページはこちら: github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
追加された 著者 Dave Burt,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript