Wie machen Sie das Skript warten auf den Status eines Erhaltungs-Anforderungs-Ajax, bevor Sie fortfahren?

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

  •  19-09-2019
  •  | 
  •  

Frage

Im Grunde, was ich tue, ist für die Existenz eines Objekts überprüft, wenn es nicht gefunden wird, versuchen Sie das Skript wird die Quelldatei mit getScript zu laden. Ich möchte nur einmal zurückkehren, obwohl dann prüfen, wahr oder falsch auf die Funktion, dass Anrufe holen ()

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

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

   });

   return isReady;

   }

aber Rückkehr Kicks vor dem Skript lädt = /

später das Skript geladen wird, aber die Funktion false zurückgegeben.

Das ist die Schönheit der asynchron nehme ich an ...

Was ist der beste Weg, dies zu handhaben ... Vielleicht könnte ich überprüfe wieder an einem anderen Punkt, wenn das Objekt vorhanden ist?

Vielleicht gibt es einen besseren Weg, dies zu tun, wo ich nicht haben, um möglicherweise den Browser zu sperren?

War es hilfreich?

Lösung

Von der Organisation des Codes Ich vermute, Sie ein Objekt verwenden, um Ihre Methoden zu enthalten. Wenn ja, dann können Sie benutzerdefinierte Ereignisse wie folgt verwenden:

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

Andere Tipps

Siehe jQuery.ajax (): . Fabrikat async false

  

Standardmäßig werden alle Anforderungen asynchron gesendet werden (d.h. diese standardmäßig auf true gesetzt ist). Wenn Sie synchrone Anforderungen benötigen, setzen Sie diese Option auf false gesetzt. Beachten Sie, dass synchrone Anforderungen vorübergehend den Browser sperren kann, deaktivieren alle Aktionen während der Anfrage aktiv ist.

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

  });


 }

Sie müssen den Wert innerhalb der Callback-Funktion zurückkehren, sonst wird es die Anfrage dann wieder sofort beginnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top