2013-06-01 96 views
0

我有,我用我的控制器小回購廠服務:爲什麼沒有angularjs緩存我的請求到github api?

我的控制器:

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所述。

回答

0

您實際上並未使用GitHub方法來檢查修改後的一組問題。您已將其註釋掉,但我不確定問題列表實際上是否返回(或使用)標頭。它應該返回一個ETag標題,然後您可以使用If-None-Match發回。否則,我可能會猜測angular只會緩存單頁加載,並且如果您添加了一種測試方法(而不刷新瀏覽器中的頁面),例如重新發出此請求的按鈕,您可能會請參閱角度緩存請求。

然後,您應該再次檢查文檔以查看您是否應該期待200(原始響應)或304(僞造響應)。您還應該檢查響應中的標題以查看您的ratelimit是否更改。

+0

你能告訴我什麼是解決方案嗎? –

+1

我不太瞭解Angular,但我爲你閱讀了一些其他問題,併爲你閱讀了他們的文檔。這裏有一個問題可能會有所幫助:http://stackoverflow.com/questions/12225475/angularjs-how-to-add-caching-to-resource-object(閱讀所有的答案)及其文件如何執行緩存(雖然他們似乎建議使用'$ resource'而不是'$ http'):http://docs.angularjs.org/api/ng.$http –

相關問題