如何覆盖Ext JS JsonStore超时?

时间:2010-02-12 17:06:07

标签: json extjs

我有一个需要从超过30秒的HTTP请求返回的JsonStore。

在JsonStore配置上设置“timeout”属性不会覆盖30秒超时,也不会设置代理(而不仅仅是设置url属性)并在代理上设置超时。

如何延长此超时?

(我正在使用Ext JS 3.1.1)

var ds = new Ext.data.JsonStore({
    autoSave:       true,
    method:         "POST",
    /*url:          "search-ajax.aspx",
    timeout:        120000,*/
    root:           "rows",
    totalProperty:  "results",
    idProperty:     "primarykeyvalue",
    proxy:      new Ext.data.HttpProxy({ url: "search-ajax.aspx", timeout: 120000 }),
    fields:     previewColumnConfig,
    baseParams: {
        Command:    "",
        ID:     primaryKeyValue,
        Entity: entityFullName,
        vetype: ValidationEntityType,
        vepk:       ValidationEntityPK,
        now:        (new Date()).getTime()
        },
    writer: new Ext.data.JsonWriter({
        encode:     true,
        listful:    false
        })
    });

4 个答案:

答案 0 :(得分:36)

如果您希望整个应用中的超时时间相同,请在Ext.Ajax单例上全局设置。

Ext.Ajax.timeout = 120000; //2 minutes

如果您希望仅针对单个请求以不同方式设置超时,则需要在var中定义HttpProxy并在将其传递到JsonStore配置之前修改其中一个属性。 conn属性仅接受用于该请求的选项。

var proxy = new Ext.data.HttpProxy({ url: "search-ajax.aspx" });
proxy.conn = { timeout: 120000 };

答案 1 :(得分:12)

没有在var

中定义代理或连接
proxy:      new Ext.data.HttpProxy(
              new Ext.data.Connection({
                          url: "search-ajax.aspx",
                          timeout: 120000 })),

答案 2 :(得分:2)

您可以定义:

var proxy1 = new Ext.data.HttpProxy(
        { 
            url: 'yourUrl',
            reader: {
                    type: 'json',
                    root: 'items',
                    totalProperty: 'total'
                }
        });
proxy1.timeout = 600000; 

它包括代理中的读者

答案 3 :(得分:2)

我知道这个问题已经过时但是想添加覆盖选项我发现它可以在 ExtJS 4.2.2中运行

Ext.override(Ext.data.proxy.Ajax, { timeout: 120000 });

我在应用init中完成了覆盖,但是,我认为您可以在request之前的任何位置完成覆盖。

此外,如果您使用的是JsonP,则此覆盖适用于我:

Ext.data.proxy.JsonP.timeout = 120000;