web-dev-qa-db-ja.com

奇妙なAJAXバグIE 11

現在、リモートWebサービスを使用するためにCORSを使用する純粋なHTMLおよびJavaScript駆動のWebアプリに取り組んでいますが、現在IE 11 GETリクエストの作成に問題があります。面白いことは私たちですIE8/9/10でうまく機能しましたが、11ではありません。

問題は、IE 11がタイムアウトし、サーバーからの応答を待たないように見えることです。ajax呼び出しは単純です:

$.ajax(url, {
    dataType: 'json',
    complete: complete,
    type: 'GET',
    global: true,
    success: success,
    crossDomain: true,
    xhrFields: {
        withCredentials: true
    }
});

[ネットワーク]タブでFiddlerを使用すると、IEはリクエストを送信することさえありません。

誰にもアイデアがありますか?

[〜#〜] edit [〜#〜]:私はすでにキャッシュを試したことを言及するのを忘れていました:false。また、開発ツールでドキュメントモードをEdgeから9に切り替えた場合、IEをクリアして再起動した後でも、呼び出しが毎回機能するという点で非常に奇妙なことを発見しました。キャッシュがtrueかfalseか非常に奇妙です:\

24
Daveo

IEはキャッシングで有名です。キャッシュされた応答を取得していないことを確認してください。 cacheプロパティ値をfalseに設定するか、URLに一意のタイムスタンプを追加して、キャッシュされた応答にならないようにすることができます。 $.now() メソッドを使用して、一意のタイムスタンプを取得できます。

キャッシュプロパティの設定

_$.ajax(url, {
    dataType: 'json',
    cache : false,
    //Other things ...
}
_

URLに一意のタイムスタンプを追加する

_var url="somePage.php?"+$.now();
//Use this url now for making the ajax call
_

$.now()メソッドは、式_(new Date).getTime()_によって返される数値の省略形です。

33
Shyju

私はわからない、多分それはキャッシングだ、プロパティ「cache:false」を設定してみてください

それ以外の場合は、URLの最後に日時を追加することもできます。そのため、毎回異なるURLがあり、IEはキャッシュしません

url +""+ (new Date()).getTime()
5
Black Ops

In headタグでこれを使用します

<meta http-equiv="X-UA-Compatible" content="IE=9,chrome=1">
4
SarwarCSE

私はこのスレッドが古いことを知っていますが、この問題に遭遇した人のための特別なチェックとして、信頼済みサイトゾーン設定がドメインを越えたアクセスを許可していることをチェックします。 「その他」の下の最初の設定は、必要な設定です。

[ドメイン間でデータソースにアクセス]を[有効]に設定します。

2
Peter C

ローカルで実行している場合は、crossDomainをfalseに切り替えてみてください。私はそのことにこだわってかなりの時間を費やしました。 Chrome crossDomainを処理しましたが、IEでcrossDomainを使用していない場合にtrueに設定すると、暗黙的に失敗します。

2
DeadlyChambers