【问题标题】:Deactivate cache for JSON with $http.get使用 $http.get 为 JSON 停用缓存
【发布时间】:2016-02-04 07:40:08
【问题描述】:

我正在学习 Angular,目前我正在尝试将 JSON 文件正确加载到我的代码中,这样我就可以对其进行迭代并显示所有结果。我可以做到这一点,但是一旦我更改了 JSON,又添加了三个注册表,我就看不到它们了。

那是因为我的 JSON 被缓存了,正如我在开发者控制台的网络部分看到的那样。

我尝试更改我的数据服务服务(它使用 $q 和 $http 进行异步请求),所以我可以配置我的 $http 对象:

app.factory('dataService', ["$http", "$q", function($http, $q) {
        return {
            getAll: getAll
        }

        function getAll() {
            var defered = $q.defer();
            var promise = defered.promise;

            $http({
                url: "data.json",
                cache: false,
                method: "GET"

            })
                .success(function(data) {
                    defered.resolve(data);
                })
                .error(function(err) {
                    defered.reject(err)
                });

            return promise;
        }
    }]);

这一直有效,但并没有停止缓存我的 JSON。我删除了我的缓存并再次执行了应用程序,我得到了新的结果,但是一旦我添加了更多的注册表,它就会一直被缓存。

那么,问题是……如何避免我的 JSON 文件被缓存?

【问题讨论】:

    标签: angularjs json ajax caching


    【解决方案1】:

    最好的办法是在返回data.json 时指定正确的Cache-Control 标头。

    但是,如果您对服务器几乎没有控制权,则可以强制通过附加随机查询字符串参数 AKA cache buster 来获取新资源。在有角度的情况下,这可能看起来像:

    $http({
      url: "data.json?_cache_buster=" + new Date().getTime(),
      method: "GET"
    })
    

    【讨论】:

    • 谢谢!它工作正常,但我想这会在我每次执行请求时缓存一个 JSON 文件。我怎样才能避免这种情况?
    • @Zerok 在实践中,上述内容可防止资源被缓存。 “每次执行请求时都会缓存 JSON 文件”是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2012-07-18
    • 2018-09-27
    • 2016-11-30
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多