2011-06-03 39 views
13

¿Cómo puedo hacer solicitudes ajax sincrónicas en EXT JS?EXT Js Solicitud ajax síncrona

Por ejemplo, dado este código:

test1(); 
ajaxRequest(); //Ajax Request 
test2(); 

La función test2 se ejecuta sin siquiera terminar la ejecución de ajaxRequest(), que tiene una llamada Ext.Ajax.request.

¿Cómo puedo hacer que text2() se ejecute solo después de que se haya ejecutado la función ajaxRequest()?

entiendo que una forma de hacerlo es llamar a la función de devolución de llamada en un test2, pero tengo algunas dependencias y una gran cantidad de código que tiene que ser ejecutada después de la petición Ajax, de manera sincrónica. ¿Puedes ayudarme con la mejor solución?

Respuesta

24

que necesitaba algo similar y después de mirar el código fuente de Ext.Ajax.request() y Ext.data.Connection, encontré que comprueben la existencia de un atributo async, en el request() método, por lo que, en realidad es posible hacer una petición síncrona, como esto:

var response = Ext.Ajax.request({ 
    async: false, 
    url: 'service/url' 
}); 
var items = Ext.decode(response.responseText); 

parece async este atributo no está documentado, así que ... por supuesto ... tenga en cuenta que puede cambiar en versiones futuras.

+2

El atributo async ahora está documentado para Ext.Ajax.request en la versión 5.0. Consulte docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.Ajax – dansalmo

+0

para 3.4 No encuentro asincrónico utilizado –

5

ExtJS no proporciona capacidades de solicitud sincrónica de fábrica. De hecho, desaconsejan fuertemente su uso.

Puede que la conversación following le haya sido útil.

+1

Esta es una discusión de 2007. – Meredith

+1

El atributo async está documentado para Ext.Ajax.request en la versión 5.0. Ver http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.Ajax – dansalmo

11

En Extjs.Ajax cada llamada AJAX resultados en uno de los tres tipos de funciones de devolución de llamada:

  • success que se ejecuta si la llamada AJAX se crea con éxito y recibe una respuesta
  • failure que se ejecuta si falla la llamada AJAX para obtener una respuesta
  • callback que se ejecuta después de la llamada AJAX obtiene una respuesta

Si se desea ejecutar test2(); después de su petición ajax termina,
Entonces ponga su función test2 interior de una función success, failure, o callback; cualquiera que elija depende de usted ...

Más información sobre el success o failure función se puede encontrar here.

test1(); 
Ext.Ajax.request({ 
    url: 'page.php', 
    params: { 
     id: 1 
    }, 
    // scope: this, // you can set the scope too 
    callback: function(opt,success,respon){ 
     test2(); 
    } 
}); 

Nota: Este método no funciona con ExtJS 3.