IE 8缓存ajax调用

时间:2014-10-27 17:23:24

标签: javascript jquery ajax internet-explorer caching

我正在尝试使用ajax GET方法获取一些数据,它在除IE之外的所有浏览器中都很有效。 在IE中,它是在第一次调用时缓存数据并缓存它我需要阻止它。 我在我的代码中尝试了以下方法,但仍然无法解决问题

1)在代码中全局设置caching = false     $ .ajaxSetup({cache:false});

2)将其放入元标记

<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>

3)使用POST而不是GET方法

          $.ajax({  
                cache: false,
                type: "POST",
                url: '/XYZURL/' + Id,
                dataType: "json",
                async: false,
                success: function(Response) {                                   
                    $scope.data = Response;

                },

4)尝试在我的代码中包含此位但没有成功

if(url.replace("?") != url)
   url = url+"&rand="+new Date().getTime();
else
   url = url+"?rand="+new Date().getTime();

请帮我解决这个问题,过去2天一直困扰着我。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

       var browser = window.navigator.userAgent;
       var msie = browser.indexOf ( "MSIE " );
       if(msie > 0){
        var remoteId = index.entity.id;
         var  ie_fix = new Date().getTime();
             $.ajax({  
                    cache: false,
                    type: "GET",
                    url: '/XYZURL/' + Id,

                    dataType: "json",
                    async: true,
                    success: function(Response) {                                   
                        $scope.data = Response;
                    },
                    error: function(jqXHR,errorThrown) {                                
                        alert("jqXHR");
                    }
                });  
        }else{
            $scope.data = datafactory.show({id: index.id});     
        }

尽管我的代码是基于角度的,我使用jQuery ajax进行所有服务调用但是尝试根据浏览器实现angular和ajax调用,这解决了我的问题。我知道这可能不是正确的方法,而是唯一对我有用的解决方案。

答案 1 :(得分:-1)

正如本文所述,How to prevent a jQuery Ajax request from caching in Internet Explorer? 如果您使用的是cache: false选项,则不应缓存调用。我发现不同的是async选项。

因此,在您的ajax调用中将async: false更改为async: true后尝试。