3

我的技术栈是——

  1. AngularJS
  2. 引导程序
  3. 春季MVC
  4. 休眠

我在做什么 :

有一个我正在执行 CRUD(创建、读取、更新和删除)的项目列表

  1. 通过 Angular 控制器将表单数据发布到 Spring 控制器。
  2. Spring Controller -> DAO 方法 -> DB 更新
  3. Spring 控制器返回“Y”或“N”
  4. Angular 获取状态消息并重新加载 Angular 模型(用于填充项目列表的 Json 数组)
  5. 与更新和删除相同

我的目标是在不重新加载页面的情况下实现实时数据操作。

这在 Chrome 中运行良好。但是,IE 无法检测到 Model Change。它在添加/更新/删除(从其缓存中)之前一直显示数据。只有在我手动清除缓存后,我才能真正看到更改后的模型。

需要有关如何使用 IE8 及更高版本解决此问题的帮助。

PS我已经尝试设置元标题

4

3 回答 3

5

你可以设置

“服务器端响应的无缓存标头”

var AppInfrastructure = angular.module('App.Infrastructure', []);

在 Angularjs 中你可以编写拦截器,下面是示例代码:

AppInfrastructure
    .config(function ($httpProvider) {
        $httpProvider.requestInterceptors.push('httpRequestInterceptorCacheBuster');
    })    
    .factory('httpRequestInterceptorCacheBuster', function () {
        return function (promise) {
            return promise.then(function (request) {
                if (request.method === 'GET') {
                    var sep = request.url.indexOf('?') === -1 ? '?' : '&';
                    request.url = request.url + sep + 'cacheSlayer=' + new Date().getTime();
                }

                return request;
            });
        };
    });   
于 2013-08-08T10:32:28.990 回答
5

与上面提到的 Jquery Guru 相同,但它是在较新版本的 angular 中配置

.factory('noCacheInterceptor', function () {
        return {
            request: function (config) {
                console.log(config.method);
                console.log(config.url);
                if(config.method=='GET'){
                    var separator = config.url.indexOf('?') === -1 ? '?' : '&';
                    config.url = config.url+separator+'noCache=' + new Date().getTime();
                }
                console.log(config.method);
                console.log(config.url);
                return config;
           }
       };
});

您应该在验证后删除 console.logs

于 2014-01-23T20:57:16.103 回答
1

@Avinash 似乎您也只使用了这个想法,但没有使用确切的解决方案,在我尝试之前不确定您的意思,并且必须自己进行不同的实现才能使其工作。

无论如何,我决定与世界其他地方分享我的发现,这样也许可以节省一些时间。

我试图实现上面的代码 1 for 1... 我遇到的第一个明显问题是传递给 promise 的请求参数内部有一个与上面显示的对象结构不同的对象结构,以获取 .method 和 .我需要先进入 .config 的 url。所以它是request.config.method。

但这不是主要问题,我的问题是,即使在实现了这个之后,调用的最终 url 也没有附加这个 cacheSlayer。

我的解决方案 :) 创建 $resource 时传入(url、附加设置、方法)。在我传入 {'cacheSlayer':new Date().getTime()} 的附加设置中,它确实开始将其添加到我的资源 URL 中。

希望这可以帮助

于 2013-12-02T20:43:53.713 回答