2010-02-12 6 views
15

Tengo una JsonStore que debe regresar de una solicitud HTTP que demora más de 30 segundos.¿Cómo puedo anular el tiempo de espera de Ext JS JsonStore?

Al establecer la propiedad "timeout" en la configuración JsonStore no se anula el tiempo de espera de 30 segundos, tampoco se establece un proxy (en lugar de simplemente establecer la propiedad url) y se agota el tiempo de espera del proxy.

¿Cómo puedo extender este tiempo de espera?

(estoy usando 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 
     }) 
    }); 

Respuesta

35

Si desea que el tiempo de espera sea el mismo en toda la aplicación, de modo global en el Ext.Ajax Singleton.

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

Si desea que el tiempo de espera que se establezca de manera diferente sólo en una única solicitud, se tendrá que definir el HttpProxy en una var y modificar una de sus propiedades antes de pasarlo a la JsonStore config. La propiedad conn toma las opciones que se utilizarán solo para esa solicitud.

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

sin definir el proxy o la conexión en un var

proxy:  new Ext.data.HttpProxy(
       new Ext.data.Connection({ 
          url: "search-ajax.aspx", 
          timeout: 120000 })), 
2

Se puede definir:

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

Se incluyen lector de proxy

+0

para el almacén existente en la red se podría actualizar el tiempo de espera directamente 'grid.getStore() getProxy() = tiempo de espera 60000'.. –

2

Sé que esta pregunta es viejo pero quería agregar la opción de anulación que encontré que funciona en ExtJS 4.2.2

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

que completaron la anulación de la aplicación init sin embargo, creo que se podría completar esta anulación en cualquier lugar antes de la request.

Además, si está utilizando jsonp esta invalidación funciona para mí:

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