Como você faz a espera roteiro para o status de uma solicitação get Ajax antes de continuar?

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

  •  19-09-2019
  •  | 
  •  

Pergunta

Basicamente o que eu estou fazendo é verificar a existência de um objeto, se não for encontrado, o script tentará carregar o arquivo de origem usando getScript. Eu só quero verificar isso, uma vez que, em seguida, retornar verdadeiro ou falso para a função que as chamadas fetch ()

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

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

   });

   return isReady;

   }

Mas a volta entra em ação antes do script cargas = /

depois que o script é carregado, mas a função retornou false.

Esta é a beleza da I assíncrona suponho ...

Qual é a melhor maneira de lidar com isso ... Talvez eu pudesse verificar novamente em algum outro ponto, se o objeto existe?

Ou talvez haja uma maneira melhor de fazer isso, onde eu não tenho que potencialmente bloquear o navegador?

Foi útil?

Solução

A partir da organização de seu código eu estou supondo que você está usando um objeto para conter os seus métodos. Se sim, então você pode 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);

Outras dicas

Consulte jQuery.ajax () :. Marca async false

Por padrão, todas as solicitações são enviadas assíncrona (ou seja, isso é definido como true por padrão). Se você precisar de solicitações síncronas, defina esta opção como falsa. Note-se que solicitações síncronas podem bloquear temporariamente o navegador, impossibilitando qualquer ação enquanto o pedido está ativo.

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;
  }

  });


 }

Você precisa retornar o valor dentro da função de retorno de chamada, caso contrário ele irá iniciar o pedido, em seguida, retornar imediatamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top