Comment faites-vous le script d'attente pour le statut d'Ajax se demande avant de continuer?
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?
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.