Cordova / AngularJS $ http.get总是被缓存

时间:2015-09-18 10:13:57

标签: angularjs cordova http caching get

每次打开应用程序时检查服务器消息。

在Android上,此消息始终被缓存。 当服务器脱机时,将返回缓存的消息。 这也是一个问题,因为那时应该显示一条消息(默认错误消息或超时)。

尝试了以下内容:

$http.get(url, { cache: false }) ...

之前

$cacheFactory.get('$http').removeAll();

即使

localStorage.clear();

同样在模块索引中:

.config(['$httpProvider', function($httpProvider)
{
    if (!$httpProvider.defaults.headers.get)
    {
        $httpProvider.defaults.headers.get = {};
    }
}])

在IOS上,除了服务器脱机时,该值似乎不会缓存。

1 个答案:

答案 0 :(得分:1)

您可以安装Cordova插件来禁用Android和IOS的缓存:

ionic cordova plugin add cordova-disable-http-cache

或者您可以在离子论坛上查看this solution



myApp.factory('httpInterceptor', ['$q',function($q) {
var regex = new RegExp('\.(html|js|css)$','i');
var isAsset = function(url){
    return regex.test(url);
};
return {
    // optional method
    'request': function(config) {
        // do something on success
        if(!isAsset(config.url)){            //if the call is not for an asset file
            config.url+= "?ts=" +  Date.now();     //append the timestamp
        }
        return config;
    },

    // optional method
    'requestError': function(rejection) {
        // do something on error
        return $q.reject(rejection);
    },



    // optional method
    'response': function(response) {
        // do something on success
        return response;
    },

    // optional method
    'responseError': function(rejection) {
        return $q.reject(rejection);
    }
};
}]);

//appended the interceptor in the config block using $httpProvider
$httpProvider.interceptors.push('httpInterceptor');