【问题标题】:Why isn't angularjs caching my request to the github api?为什么 angularjs 不将我的请求缓存到 github api?
【发布时间】:2013-05-28 01:07:14
【问题描述】:

我在控制器中使用了一个小型 repo factory 服务:

我的控制器:

angular.module('repoApp')
  .controller('MainCtrl', function ($scope, $repoService) {
    $scope.repos = $repoService.getRepos();
  });

我的工厂:

angular.module('repoApp')
  .factory('$repoService', function ($http) {
    var repos =
      // $http.defaults.headers['If-Modified-Since'] = 'Sat, 01 Jun 2013 1:31:30 GMT';
      $http.jsonp('https://api.github.com/repos/mojombo/jekyll/issues?state=closed&callback=JSON_CALLBACK',
      {
        cache: true
      }
    );
    // Public API here
    return {
      getRepos: function () {
        return repos.then(function(repoData) {
          return repoData.data.data;
        });
      }
    };
  });

这很好 - 我得到了结果,但每次浏览器刷新时,我最终都会得到 200 响应而不是 304。我做错了什么?

我也尝试过使用JSON_SINGLE_CALLBACK 中提到的this closed issue

【问题讨论】:

    标签: caching angularjs jsonp github-api


    【解决方案1】:

    您实际上并没有使用 GitHub 方法来检查已修改的问题集。您已将其注释掉,但我不确定问题列表是否实际返回(或使用)Last-Modified/If-Modified-Since 标头。它应该返回一个ETag 标头,然后您可以使用If-None-Match 将其发回。否则,我可能会猜测 Angular 只会缓存单个页面加载,并且如果您添加了一种测试方式(而不在浏览器中刷新页面),例如,重新发出此请求的按钮,您可能查看角度缓存请求。

    然后,您应该再次检查文档,看看您应该期待 200(原始响应)还是 304(伪造响应)。您还应该检查响应中的标头以查看您的速率限制是否发生变化。

    【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2018-07-25
    • 2013-03-02
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    相关资源
    最近更新 更多