Como você faz a espera roteiro para o status de uma solicitação get Ajax antes de continuar?
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?
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.