首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >$http是缓存的

$http是缓存的
EN

Stack Overflow用户
提问于 2014-09-12 09:41:17
回答 4查看 168关注 0票数 0

所以我有这样的服务:

代码语言:javascript
运行
复制
.service("checkSystemStatus", ["$http", "statusUrl", function($http, statusUrl){
    return  $http({method: "GET", url: statusUrl, cache: false});  
 }])

使用此标记:

代码语言:javascript
运行
复制
<li ng-mouseenter="checkStatus()">
  <i class="fa fa-info-circle"></i>
  <div class="info-container">  
    <h4>System Info</h4>
    <table class="system-info">
      <tr ng-repeat="(key, value) in systemInfo">
        <td>{{key}}</td>
        <td>{{value}}</td>
      </tr>
    </table>                      
  </div>
</li>

这一职能:

代码语言:javascript
运行
复制
$scope.checkStatus = function(){
  $scope.systemInfo = {};
  checkSystemStatus.then(function(success){   
      $scope.systemInfo.running = success.data.jobs_running;
      $scope.systemInfo.queued = success.data.jobs_queued;
      $scope.systemInfo.cached = success.data.jobs_cached;
      $scope.systemInfo.active_threads = success.data.threads_active;
      $scope.systemInfo.server_address = success.data.server_address;
      $scope.systemInfo.server_port = success.data.server_port;
      console.log($scope.systemInfo);
  })
}

问题是我总是为systemInfo获得相同的值,每当我悬停信息图标时,我在控制台中看不到任何XHR请求,除了第一个,这是在加载页面时发生的,而不是当我将鼠标悬停在标签上时。

到目前为止,解决这个问题的唯一方法是在url末尾添加一个参数,如

?time=unixtime

每次都要得到一个新的url,但是没有尾随参数的更干净的解决方案呢?有可能吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-12 09:50:33

它不仅依赖于"AngularJS"-Cache,而且还依赖于浏览器和服务器缓存设置。检查服务器在其响应中发送给客户端的缓存头类型。在REST-URL中添加一个“时间戳”参数是避免基于浏览器的缓存的一个技巧-是的。

但总的来说:这就是客户机-服务器通信的目的所在。我怀疑服务器发送了一些不同的、ETag、缓存过期等标题,它们将匹配。

票数 0
EN

Stack Overflow用户

发布于 2014-09-12 10:43:26

尝试将这些http头添加到服务器的响应中:

代码语言:javascript
运行
复制
Cache-Control:no-cache, no-store, must-revalidate
Expires:-1
Pragma:no-cache
票数 0
EN

Stack Overflow用户

发布于 2014-09-12 10:49:58

试着像这样

代码语言:javascript
运行
复制
.service("checkSystemStatus", ["$http", "statusUrl", '$q', function($http, statusUrl, $q){
    this.GetData = function(){
        $http.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
        return  $http({
               method: "GET",
               url: statusUrl,
               cache: false //no need to use this, caching is false by default
            }).
            then( function(response){
                if (response.data) {
                   return response.data;
                }
                else
                   return $q.reject('Request failed');
            });
    }
}]);

控制器部分

代码语言:javascript
运行
复制
$scope.checkStatus = function(){
 $scope.systemInfo = {};
 checkSystemStatus.GetData().then(function(data){   
    $scope.systemInfo.running = data.jobs_running;
    $scope.systemInfo.queued = data.jobs_queued;
    $scope.systemInfo.cached = data.jobs_cached;
    $scope.systemInfo.active_threads = data.threads_active;
    $scope.systemInfo.server_address = data.server_address;
    $scope.systemInfo.server_port = data.server_port;
    console.log($scope.systemInfo);
 })
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25805260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档