Come si fa a fare lo script attesa per lo stato di una richiesta di Ajax ottenere prima di continuare?

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

  •  19-09-2019
  •  | 
  •  

Domanda

In pratica quello che sto facendo è verificare l'esistenza di un oggetto, se non è trovato, lo script cercherà di caricare il file di origine utilizzando getScript. Voglio solo controllare questo una volta però poi tornare vero o falso per la funzione che chiama fetch ()

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

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

   });

   return isReady;

   }

ma tornare calci prima che lo script carichi = /

dopo lo script viene caricato ma la funzione restituito falso.

Questa è la bellezza di asincrona suppongo ...

Qual è il modo migliore per gestire questo ... Forse ho potuto verificare di nuovo in qualche altro punto, se l'oggetto esiste?

O forse c'è un modo migliore per fare questo, dove non devo potenzialmente bloccare il browser?

È stato utile?

Soluzione

Da l'organizzazione del codice sto indovinando che si sta utilizzando un oggetto per contenere i vostri metodi. Se è così allora si potrebbe utilizzare eventi personalizzati come questo:

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

Altri suggerimenti

jQuery.ajax () :. Fare async false

  

Per impostazione predefinita, tutte le richieste vengono inviate asincrona (cioè questa è impostata su true per impostazione predefinita). Se avete bisogno di richieste sincrone, impostare questa opzione a false. Si noti che le richieste sincrone possono bloccare temporaneamente il browser, disabilitando tutte le azioni, mentre la richiesta è attiva.

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

  });


 }

È necessario restituire il valore all'interno della funzione di callback, altrimenti si avvia la richiesta per poi tornare subito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top