在Ext中删除_dc参数

32

使用Ext,默认情况下Ext.Ajax会在GET请求中添加_dc参数。例如:

GET /ConnViewProcessing/?_dc=1263286227619

如何删除此参数?

PS: 需要手动缓存响应到 ETagIf-None-Match


对于Ext-JS 6,这三种方法都不起作用... 我找到的唯一方法是在boot.js中添加disableCaching: true, 我知道这没有意义,但如果你看看boot.js中的代码,就会明白它的工作原理。 无论如何,这并没有真正帮助,因为有些回调函数不能正常运行。 - zerkotin
14个回答

29

disableCaching选项设置为false:

Ext.Ajax.disableCaching = false;

4
这似乎是全局标志。有没有办法按请求进行设置?我想要缓存某些请求,而另一些请求则需要添加破坏缓存的参数。 - Eric
1
顺便提一下 - 禁用缓存会导致IE(以及其他浏览器)中的缓存数据。 - JeeShen Lee
2
这个值实际上放在哪里? - James McMahon

22
使用 Ext JS 4.1,在将以下代码添加到 app.js 后,_dc 参数将消失:
// Disable _dc parameter

Ext.Loader.setConfig({
    disableCaching: false
});

// My App

Ext.application({

这只影响资源的加载,不影响Ext.Ajax。如果其他人遇到此答案并希望在使用Architect时禁用脚本等的缓存破坏,或者仅在调试时禁用它,我已发布了一个提供更多信息的答案在这里 - Glenn Lawrence

17

使用Sencha Cmd 6.x实现这一点的正确方法是在app.json中设置一个(全局)开关(因为所有这些hack和覆盖可能会不必要地干扰功能):

"loader": {
    "cache": true
},

然后运行sencha app refresh,以更新应用程序的bootstrap.json

另外,也可以在运行时配置Ext.Loader:

Ext.Loader.setConfig({disableCaching: false});

当向上滚动并阅读有关Ext.Ajax(按请求)的实际问题时:
Ext.Ajax.request({url: '/ConnViewProcessing', disableCaching: false});

结果:脚本请求不再有_dc参数。
请参阅Sencha Cmd 6.x - 微加载器

在从Sencha Architect v2.2升级到v3.2后,我不得不这样做。似乎运行时加载器设置不再起作用了,可能是因为Architect现在使用SenchaCmd。 - Glenn Lawrence
1
我刚刚发现,通过在“项目设置”->“框架”中禁用 Build Tools,我可以禁用 Architect 3.2 对 SenchaCmd 的使用。这意味着我可以再次在加载器设置中使用 disableCaching=false,并且甚至可以像此处所示(http://stackoverflow.com/a/30992255/857209) 在运行时更改它 - Glenn Lawrence

10

注意在ExtJS 5中,使用Ext.Loader的方式已经发生了变化。

在ExtJS 5中,可以禁用缓存:

  • 通过在URL末尾添加"?cache"来临时禁用缓存
  • 通过设置一个名为'ext-cache'的cookie并将其值设置为1来禁用缓存
  • 或者通过编辑文件.sencha/app/Boot.js并将'_config.disableCaching'属性设置为true(覆盖动态查找)来禁用缓存

8

我使用的是ExtJS 4.2,但这也适用于Ext JS 4.1及以上版本。在代理中有一个叫做noCache的属性,你应该将其设置为false。

Ext4.define('Server',{
    extend: 'Ext4.data.Model',
    fields: [
            {name: 'id'},
            {name: 'key'},
            {name: 'value'}
    ],
    proxy: {
            type: 'rest',
            url : 'yaddayaddayadda',
            noCache: false,
            reader : {
                    type: 'json'
            }

    }
});

我的代码中为什么写了"Ext4."呢?因为我正在使用沙盒模式,将旧的Ext JS 3x代码迁移到4.2版。

确认在v4.2.1下Ajax代理的noCache功能是否有效(双重否定很糟糕)。 - Radu Maris
可以确认,这种方法仍然适用于Ext JS 6.6.0。如果您想禁用Ajax请求中特定服务的“不缓存”参数,则此方法允许这样做。 - Grant Humphries

7
这应该适用于extjs 4.0.7版本:
Ext.Loader.config.disableCaching = false;

4
disableCaching标志设置为false(双重否定-耶!)在 Ext.data.Connection 上应该可以解决问题。
更多信息,请查看 disableCaching 文档。
(请注意,Ext中有相当多的类都有此选项可用,因此您可能需要进行一些操作。)

2
对于那些想在Sencha Architect 3+中设置 "disableCaching: false" 的人,以下是方法:
  1. 在项目检查器窗口中选择顶部节点 "Application"

  2. 然后在下面的 "Config" 窗口中选择 "Loader Config",在我的情况下,我必须单击右侧的 "+",因为我还没有设置任何项。这将在上面的 "Project Inspector" 窗口中创建一个新的 "LoaderXX" 对象;在我的情况下是 Loader25。

  3. 现在,要么在 "Project Inspector" 窗口中选择新对象,要么单击新的 "LoaderXX"(在我的情况下是 Loader25)旁边的右箭头。这将带您进入对象的属性。

  4. 取消选中 "disableCaching" 项目。

保存项目并刷新浏览器窗口,在 Chrome 中享受持久性断点等功能。


按照您所描述的工作正常! - Dejo
在我的Architect v3.2上没有起作用。我没有尝试过早期的3.x版本。代码已更改为设置disableCaching: false,但我怀疑这个运行时加载器设置不再起作用,因为Architect现在在保存项目时使用SenchaCmd。根据syslogic的答案修改app.json文件确实有效。 - Glenn Lawrence
抱歉@GlennLawrence,早在2014年我就很庆幸地最后一次见到了Sencha Architect和Sencha Touch。 :-) 我认为更糟糕的是我继承的有问题的代码,或者可能是客户的问题。无论哪种情况,我都不会难过看到那个项目结束了。 - Ads
没问题@Ads。我刚刚发现,通过在“项目设置”->“框架”中禁用构建工具,可以禁用Architect 3.2使用SenchaCmd,这意味着你的答案仍然有效。我找到了一种方法,甚至可以在运行时更改它,如此处所示。 - Glenn Lawrence

1

在我的项目中,全局禁用 ExtJS 4.2.x 中的 _dc 唯一的方法是:

Ext.define('Ext.data.Connection', {override:'Ext.data.Connection', disableCaching:false });
Ext.define('Ext.data.proxy.Server', {override:'Ext.data.proxy.Server', noCache:false });
Ext.define('Ext.data.JsonP', {override:'Ext.data.JsonP', disableCaching:false });

这很丑,但有其他想法吗?


1
这是我完成此任务的方法:
Ext.Ajax.request({
    url: url,
    disableCaching:false
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接