Comment faites-vous le script d'attente pour le statut d'Ajax se demande avant de continuer?

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

  •  19-09-2019
  •  | 
  •  

Question

En fait ce que je fais est de vérifier l'existence d'un objet, si elle ne le trouve pas, le script essaiera de charger le fichier source à l'aide getScript. Je veux seulement vérifier si une fois puis revenir vrai ou faux à la fonction qui appelle fetch ()

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

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

   });

   return isReady;

   }

mais le retour des coups de pied avant les charges script = /

plus tard, le script est chargé, mais la fonction retourne faux.

Ceci est la beauté asynchrone, je suppose ...

Quelle est la meilleure façon de gérer cela ... Peut-être que je pourrais vérifier à nouveau à un autre moment si l'objet existe?

Ou peut-être qu'il ya une meilleure façon de le faire où je ne dois verrouiller potentiellement le navigateur?

Était-ce utile?

La solution

De l'organisation de votre code Je suppose que vous utilisez un objet pour contenir vos méthodes. Si vous pouviez donc utiliser alors des événements personnalisés comme ceci:

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

Autres conseils

Voir jQuery.ajax () :. Faire async false

  

Par défaut, toutes les requêtes sont envoyées asynchrone (à savoir, il est réglé sur vrai par défaut). Si vous avez besoin requêtes synchrones, définissez cette option à false. Notez que les requêtes synchrones peuvent verrouiller temporairement le navigateur, la désactivation de toutes les actions alors que la demande est active.

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

  });


 }

Vous devez retourner la valeur dans la fonction de rappel, sinon il commencera la demande alors revenir tout de suite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top