2017年3月7日

IE11でajaxが動かない


キャッシュさせないことで回避できました。


Javascript(jquery)でjsonファイルを読み込んでページに表示するプログラムを作成しました。ajaxで非同期に実行させます。

Chrome、Firefoxで正常に動作したので出来上がりと思っていたら、IE11で動かないことが判明しました。最初は表示されたので大丈夫と思ったのですが、その後は実行しても反応しません。

調べてみてわかったことはIEはajax処理の2回目以降をキャッシュを使ってしまうということです。有名な事象のようでネットに対処方法が載っていました。


①$.ajaxのパラメーターでキャッシュを無効にする

以下のように「cache:false」を入れるだけなので簡単です。 しかし私の場合はなぜかうまくいきませんでした。

        $.ajax({
            type: "POST",
            dataType: 'json',
            cache : false,
            timeout: 10000,
            url: 'sample.json'
        }).done(function(json){
            ...
        }).fail(function(){
            ...
        });



②スクリプト全体でajaxのキャッシュを無効にする

jqueryには「$.ajaxSetup」でajax通信に関連するデフォルト値を変更することができます。以下のように一度実行すると$.ajaxで指定しなくてもデフォルトでキャッシュが無効になります。私の場合、こちらでうまくいきました。(と一度は思いました)

    $(function() {
        $.ajaxSetup({
            cache: false
        });
    });


③タイムアウト時間を延ばす

②でうまくいったと思っていたのですが、何度も実行していると時々うまくいかないことがありました。私のPCはなぜかIE11が非常に重く、IE11を開くと冷却ファンが最高速で回転するほどです。ブラウザの動きも緩慢でした。そこで$.ajaxのパラメーター「timeout」の時間を延ばしてみると解消されました。







0 件のコメント:

コメントを投稿