¿Cómo se hace la espera guión para el estado de una petición Ajax llegar antes de continuar?

StackOverflow https://stackoverflow.com/questions/2431567

  •  19-09-2019
  •  | 
  •  

Pregunta

Básicamente lo que estoy haciendo es la comprobación de la existencia de un objeto, si no se encuentra, el script intentará cargar el archivo de origen utilizando getScript. Yo sólo quiero comprobar esta vez, aunque luego regresar verdadero o falso a la función que llama a fetch ()

  fetch:function(obj){
      ...
        isReady = false;
   $.getScript(obj.srcFile,function(){

    isReady=true;
    warn("was able to load object "+key);

   });

   return isReady;

   }

pero patadas volver en el guión antes de cargas = /

después se carga el guión, pero la función devuelve falso.

Esta es la belleza de asíncrona supongo ...

¿Cuál es la mejor manera de manejar esto ... Tal vez podría comprobar de nuevo en algún otro punto si existe el objeto?

O tal vez hay una mejor manera de hacer esto, donde no tengo que potencialmente bloquear el navegador?

¿Fue útil?

Solución

A partir de la organización de su código que supongo que está utilizando un objeto de contener sus métodos. Si es así, entonces podría usar eventos personalizados como este:

var thing = {
    fetch: function(obj){
        var self = this;
        if (obj.isReady){
            self.trigger('ready', [obj]);
            return;
        }
        $.getScript(obj.srcFile,function(){
            obj.isReady = true;
            self.trigger('ready', [obj]);
        });
    }   
};

thing.bind('ready',function(e, obj){
    // do what you need to do when the object exists here
});
var obj = {};
thing.fetch(obj);

Otros consejos

jQuery.ajax () :. Hacer async false

  

Por defecto, todas las peticiones son enviadas asincrónico (es decir, esto se establece en verdadero por defecto). Si necesita peticiones síncronas, establezca esta opción en false. Las peticiones síncronas pueden bloquear temporalmente el navegador, la desactivación de las acciones, mientras que la solicitud está activa.

fetch:function(obj){
 isReady = false;
 $.getScript(obj.srcFile,function(script_data){

  isReady=true;
  warn("was able to load object "+key);
  if ( typeof( script_data ) != 'undefined' ) {
     return isReady;
  }

  });


 }

Es necesario para devolver el valor dentro de la función de devolución de llamada, de lo contrario, se iniciará la solicitud y luego volver enseguida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top