Angularjs 完成服务器端数据修改后,$resource query()未显示最新数据
场景 初始$resource query()从服务器检索包含“A”、“B”和“C”项的对象 然后,用户转到另一个添加条目屏幕并添加一个“D”条目。此屏幕通过服务器端进程而不是客户端进程完成 用户现在返回到第一个屏幕并重新查询$resource query(),但是,这仍然显示包含“A”、“B”和“C”项的对象。$resource检索的对象中没有“D” 问题 如何执行$resource query(),以便它现在可以转到服务器并检索最新列表 研究 我找到的最接近答案是->,但是,我不确定这个人是什么意思 将新实例添加到范围中的列表将刷新页面上显示的列表 一些代码片段 控制器js:Angularjs 完成服务器端数据修改后,$resource query()未显示最新数据,angularjs,angular-resource,Angularjs,Angular Resource,场景 初始$resource query()从服务器检索包含“A”、“B”和“C”项的对象 然后,用户转到另一个添加条目屏幕并添加一个“D”条目。此屏幕通过服务器端进程而不是客户端进程完成 用户现在返回到第一个屏幕并重新查询$resource query(),但是,这仍然显示包含“A”、“B”和“C”项的对象。$resource检索的对象中没有“D” 问题 如何执行$resource query(),以便它现在可以转到服务器并检索最新列表 研究 我找到的最接近答案是->,但是,我不确定这个人是什
angular.module('AutomationApp')
.controller('FirstTryController', function ($scope, TestSuites) {
$scope.testsuites = {};
TestSuites.query(function (response) {
$scope.testsuites = response.TestSuites;
});
});
服务js:
angular.module('AutomationApp')
.factory('TestSuites', function ($resource) {
return $resource('/api/listTestSuites/:TestSuiteId',
{ TestSuiteId: '@TestSuiteId' },
{
query: {
method: 'GET',
params: {},
isArray: false
}
});
});
app.js:
var app = angular.module('AutomationApp', ['ngRoute', 'ngResource']);
app.config(function ($routeProvider, $locationProvider) {
$routeProvider
.when('/list', {
templateUrl: 'app/views/firsttry.html',
controller: 'FirstTryController',
resolve: {
delay: function ($q, $timeout) {
var delay = $q.defer();
$timeout(delay.resolve, 500);
return delay.promise;
}
}
});
});
回顾/总结
在初始$resource query()上,它正在按预期检索最新数据。
但是,如果服务器中的数据被某个服务器端进程修改,并且用户返回并重新执行$resource query(),则检索到的数据不会反映新修改的服务器端数据
先谢谢你
****----编辑更新----****
这似乎与IE8有关。这段代码适用于Chrome和Mozilla,但不适用于IE8。你知道接下来该去哪里吗?再次感谢你
已解决
我同意我在这篇文章中的发现。感谢Pathsofdesign提供链接
我做了以下更改来实现这一点(在params{}中添加了内容):
您能否将问题缩小到服务器端或客户端?意思:这可能是由于浏览器缓存数据造成的(
query()
我认为是GET,所以可以省略缓存)。您是否可以使用Firebug(或等效工具)检查网络,并验证请求是否实际发送到服务器,而不是从缓存中检索?然后,服务器端代码中的一个断点被实际调用,它确实存储了D(也与数据库一起检查),并且在第二次调用query()
时它从数据库中获取了什么。这显然是客户端问题。DB始终具有正确的信息。然而,多亏了你的评论,我才意识到这只发生在IE上?!在家里我使用Chrome,但不幸的是,在我的工作中,我不得不使用IE8。同样的代码在Chrome上运行,而我只是在工作时安装了Mozilla(不能安装Chrome),并且它在Mozilla上运行良好?!所以这显然是IE8的一个问题。你知道接下来该怎么办吗?看看chrome中的网络标签,服务器是否会在后续请求中被调用?这可能是缓存请求,只是将缓存结果返回给您,而不实际转到服务器。是的,这是一个IE缓存问题。。。由于问题已经缩小到这一点,我目前正在研究如何解决这个问题。在我弄明白后会发布修复(希望如此)。也许这会有用?
Service js:
angular.module('AutomationApp')
.factory('TestSuites', function ($resource) {
return $resource('/api/listTestSuites/:TestSuiteId',
{ TestSuiteId: '@TestSuiteId' },
{
query: {
method: 'GET',
params: { 'foobar': new Date().getTime() },
isArray: false
}
});
});