martes, agosto 07, 2012

ExtJS - request aborted by TimeOut.

En ExtJS 3.2.4 al llamar un proceso PHP que tarda más de 30 segundos vía Ajax, el proceso se cancela automaticamente sin razón aparente.
handler:function() {
  var titulo="ENVIA FORMULARIO";
  if (frm.form.isValid()){
   var campo1  = Ext.getCmp('campo1').getValue();
   var campo2  = Ext.getCmp('campo2').getValue();
   var campo3 = Ext.getCmp('campo3').getValue();
   var conn = new Ext.data.Connection();
   Ext.MessageBox.wait('Por favor espere...', titulo);
   conn.request({
     url   : 'fileCRUD.php'
    , params: {
      'campo1' :campo1
     ,'campo2' :campo2
     ,'campo3' :campo3
    }
    , success: function (result, request ) {
     Ext.MessageBox.hide();
     var jsonData = Ext.util.JSON.decode(result.responseText);
     Ext.Msg.show({
      title: titulo,
      msg: jsonData.msg,
      buttons: Ext.Msg.OK,
      animEl: 'elId',
      icon: Ext.MessageBox.INFO
     });
     myAppStore.reload();
     myAppWin.close();
    } //end of success
    ,failure: function (result, request ) {
     Ext.MessageBox.hide();
     var jsonData = Ext.util.JSON.decode(result.responseText);
     Ext.Msg.show({
      title: 'Error: ' + titulo,
      msg: 'Hubo un error al realizar ' + titulo + jsonData.statusText,
      buttons: Ext.Msg.OK,
      animEl: 'elId',
      icon: Ext.MessageBox.ERROR
     });
    } //end of failure
   }); //end of conn.request
  } //end if
 } //end of handler
 
Request Ajax = Aborted

Despues de investigar un poco, descubrí que el proceso se cancela debido a que valor por default del timeOut (tiempo de espera) es de 30000 milisegundos .

Intente cambiar el valor del tiempo de espera (timeOut):

En todas las llamadas Ajax:

Ext.ajax.timeOut = 600000 /* No funciona */ 
Al realizar la conexión:
Ext.Connection.timeOut = 600000 /* No Funciona */ 
En el formulario:
Ext.Form.timeOut = 600000 /* No Funciona */ 
Sin embargo este valor no se modificaba a nivel global.

Despues de multiples intentos y pruebas, he logrado cambiar el valor del timeOut con la siguiente línea al inicio del programa.
 /* SI FUNCIONA */
Ext.data.Connection.prototype.timeout =30000; // 600 segundos; 5 minutos;

Espero que les sea de utilidad.

 Happy Coding!

6 comentarios:

Anónimo dijo...

Graaacias, esto lo he buscado por muucho tiempo

luish dijo...

hola amio, esto es lo que ando buscando, pq tengo un proceso de migracion de datos, dentro de ello tengo un update que demora mas de 32 segundos y me aborta. dime donde configuro la linea q publicaste?

ENORMEMENTE AGRADECIDO

luish dijo...

upsss haber si me respondes a mi correo lhilariocontreras@gmail.com

graciaa

Unknown dijo...

De ahora en adelante seras un hermano... :), todo el santo dia de ayer buscando el porque se aborta la petición, modifique casi todo el php .ini y nada... y en la mañana me pregunto... cuando se activa el "failure" de la llamada ajax... :) .. Gracias brother :)

pixelead0 dijo...

Hola @David que gusto que te haya sido de ayuda, yo también en su momento me tarde 2 días enteros tratando de resolverlo.

Anónimo dijo...

Gracias por el post, da gusto encontrar información sobre extjs bien explicada y en español :D

.