所以我有这样的服务:
.service("checkSystemStatus", ["$http", "statusUrl", function($http, statusUrl){
return $http({method: "GET", url: statusUrl, cache: false});
}])
使用此标记:
<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>
和这个功能:
$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请求,除了第一个,在加载页面时发生,而不是在我悬停时标签上的鼠标。
?time=unixtime
答案 0 :(得分:0)
嗯,它不仅取决于&#34; AngularJS&#34; -Cache,还取决于浏览器和服务器缓存设置。检查响应中的服务器向客户端发送哪种缓存标头。添加&#34;时间戳&#34; REST-URL的参数是避免基于浏览器的缓存的一个技巧 - 是的。
但总的来说:这就是客户端 - 服务器通信的方式。我怀疑服务器会发送一些匹配的Vary,ETag,Cache-Expire等标题。
答案 1 :(得分:0)
尝试将这些http标头添加到服务器的响应中:
Cache-Control:no-cache, no-store, must-revalidate
Expires:-1
Pragma:no-cache
答案 2 :(得分:0)
试试这个
.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');
});
}
}]);
控制器部分
$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);
})
}
答案 3 :(得分:0)
正如其他答案告诉您的那样:如果未设置来自服务器的相应响应标头,浏览器可以选择缓存响应。在MajoBs回答中设置响应头。
如果您无法从服务器更新响应标头,则可以确保每个请求的网址都是唯一的。您可以通过向网址添加时间戳来执行此操作:
.service("checkSystemStatus", ["$http", "statusUrl", function($http, statusUrl){
statusUrl = statusUrl + '?' + Date.now();
return $http({method: "GET", url: statusUrl, cache: false});
}])