【问题标题】:Removing _dc parameter in Ext移除 Ext 中的 _dc 参数
【发布时间】:2011-01-04 02:24:27
【问题描述】:

使用Ext,默认Ext.Ajax添加到GET-request _dc参数。例如

GET /ConnViewProcessing/?_dc=1263286227619

如何去掉这个参数?

PS:需要手动缓存对ETagIf-None-Match的响应。

【问题讨论】:

  • 对于 Ext-JS 6,这 3 种方法不起作用......我发现的唯一一件事是放入 boot.js disableCaching: true,我知道这没有任何意义,但如果你看boot.js 中的代码,就是这样工作的。无论如何,它并没有真正帮助,因为某些回调无法正常运行。

标签: extjs


【解决方案1】:

disableCaching 选项设置为false:

Ext.Ajax.disableCaching = false;

【讨论】:

  • 这看起来像一个全局标志。有没有办法根据请求执行此操作?我有一些想要缓存的请求,还有一些想要添加缓存清除参数的请求。
  • 附注 - 禁用缓存将导致 IE 中的缓存数据(可能还有其他)。
  • 你把这个值放在哪里?
【解决方案2】:

使用Ext JS 4.1,在app.js添加如下代码后,_dc参数消失:

// Disable _dc parameter

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

// My App

Ext.application({

【讨论】:

  • 这只影响资源的加载,不影响Ext.Ajax。如果其他人遇到此答案并希望能够在使用 Architect 时禁用脚本等的缓存破坏,或者只想在调试时禁用它,我发布了一个提供更多信息的答案here
【解决方案3】:

使用 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 - The Microloader

【讨论】:

  • 从 Sencha Architect v2.2 升级到 v3.2 后,我不得不这样做。运行时加载器设置似乎不再起作用,大概是因为 Architect 现在使用 SenchaCmd。
  • 我刚刚发现我可以通过在 Project Settings -> FrameworkBuild Tools 来禁用 Architect 3.2 对 SenchaCmd 的使用/b> 这意味着我可以再次在加载器设置中使用disableCaching=false,甚至可以在运行时更改它,如图所示here
【解决方案4】:

请注意,ExtJS 5 中 Ext.Loader 的使用发生了变化。

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

  • 暂时在网址末尾添加“?cache
  • 通过设置一个名为 'ext-cache' 的 cookie 值为 1
  • 或通过编辑文件.sencha/app/Boot.js 并将'_config.disableCaching' 属性设置为true(覆盖动态查找)。

【讨论】:

    【解决方案5】:

    我正在使用 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 时使用的是沙盒模式

    【讨论】:

    • 确认 noCache 适用于 v4.2.1 下的 Ajax 代理(双重否定很烂)
    • 可以确认这种方法仍然适用于 Ext JS 6.6.0。如果您希望禁用对特定服务的 Ajax 请求的“不缓存”参数,此方法允许这样做
    【解决方案6】:

    这应该适用于 extjs 4.0.7:

    Ext.Loader.config.disableCaching = false;
    

    【讨论】:

      【解决方案7】:

      Ext.data.Connection 上将标志disableCaching 设置为false(双重否定 - 耶!)应该可以解决问题。

      有关更多信息,请查看disableCaching-文档。

      (请注意,Ext 中的很多类似乎都有可用的选项,因此您可能需要稍微搞砸。)

      【讨论】:

        【解决方案8】:

        对于那些想在 Sencha Architect 3+ 中设置“disableCaching: false”的人,这里是如何...:

        1. 在项目检查器窗口中,选择顶部节点, “应用”

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

        3. 现在要么在 “Project Inspector”窗口,或单击旁边的右箭头 新的“LoaderXX”(在我的例子中是 Loader25)。这将带你到 对象的属性。

        4. 取消勾选“disableCaching”项。

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

        【讨论】:

        • 按照您的描述工作!
        • 在 Architect v3.2 中对我不起作用。我没有尝试早期的 3.x 版本。代码更改为设置disableCaching: false,但我怀疑此运行时加载程序设置不再有效,因为 Architect 现在在保存项目时使用 SenchaCmd。但是,根据 syslogic 的回答修改 app.json 文件确实有效。
        • 对不起@GlennLawrence,幸好2014年初是我最后一次关注Sencha Architect和Sencha Touch。 :-) 我认为更多的是我继承的狡猾的代码让生活变得如此糟糕,或者也许是客户。不管怎样,看到那个项目的后端我并不难过。
        • 不用担心@Ads。我刚刚发现我可以通过禁用 Project Settings -> Framework 中的 Build Tools 来禁用 Architect 3.2 对 SenchaCmd 的使用,这意味着你的答案仍然有效。我想出了一种方法,您甚至可以在运行时更改它,如图所示 here
        【解决方案9】:

        我能够在我的项目中全局禁用 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 });
        

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

        【讨论】:

          【解决方案10】:

          我就是这样做的:

          Ext.Ajax.request({
              url: url,
              disableCaching:false
          });
          

          【讨论】:

            【解决方案11】:

            我决定要在客户端销毁缓存,但在服务器端我使用的是我自己的缓存机制(PHP 的 APC)。

            我在Ext ajax请求中留下了_dc,然后从REQUEST_URI中去掉了,然后用REQUEST_URI作为缓存key的基础

            我发现这很有用:Regular expression to remove one parameter from query string

            【讨论】:

              【解决方案12】:

              如果你在 Sencha CMD 下开发,你可以这样做

              http://localhost:1841/?disableCacheBuster
              

              或者只是

              http://localhost:1841/?cache
              

              【讨论】:

                【解决方案13】:

                我在 Ext.JS 之上使用 Ext.NET。它为 Ext.js 添加了更多的巫术...... 我试图摆脱 dc= 参数,但所有提到的配置都不起作用。所以,这是我的超级有效,超级肮脏的解决方案:

                Ext.Date.now = function () { return ""; }
                

                据我所知, Ext.Date.now() 仅用于缓存逻辑。所以应该是相对论保存。

                【讨论】:

                  猜你喜欢
                  • 2017-03-10
                  • 1970-01-01
                  • 2018-05-04
                  • 2012-03-27
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-10-23
                  • 1970-01-01
                  • 2016-05-20
                  相关资源
                  最近更新 更多