Angularjs 完成服务器端数据修改后,$resource query()未显示最新数据

Angularjs 完成服务器端数据修改后,$resource query()未显示最新数据,angularjs,angular-resource,Angularjs,Angular Resource,场景 初始$resource query()从服务器检索包含“A”、“B”和“C”项的对象 然后,用户转到另一个添加条目屏幕并添加一个“D”条目。此屏幕通过服务器端进程而不是客户端进程完成 用户现在返回到第一个屏幕并重新查询$resource query(),但是,这仍然显示包含“A”、“B”和“C”项的对象。$resource检索的对象中没有“D” 问题 如何执行$resource query(),以便它现在可以转到服务器并检索最新列表 研究 我找到的最接近答案是->,但是,我不确定这个人是什

场景

初始$resource query()从服务器检索包含“A”、“B”和“C”项的对象

然后,用户转到另一个添加条目屏幕并添加一个“D”条目。此屏幕通过服务器端进程而不是客户端进程完成

用户现在返回到第一个屏幕并重新查询$resource query(),但是,这仍然显示包含“A”、“B”和“C”项的对象。$resource检索的对象中没有“D”

问题

如何执行$resource query(),以便它现在可以转到服务器并检索最新列表

研究

我找到的最接近答案是->,但是,我不确定这个人是什么意思

将新实例添加到范围中的列表将刷新页面上显示的列表

一些代码片段

控制器js:

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
            }
        });
});