Как вы заставляете скрипт ждать состояние запроса на получение Ajax, прежде чем продолжить? - PullRequest
0 голосов
/ 12 марта 2010

По сути, я проверяю наличие объекта, если он не найден, скрипт попытается загрузить исходный файл, используя getScript. Я хочу проверить это только один раз, а затем вернуть true или false в функцию, которая вызывает fetch ()

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

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

   });

   return isReady;

   }

, но возврат запускается до загрузки скрипта = /

позже скрипт загружается, но функция вернула false.

Это красота асинхронного, я полагаю ...

Какой лучший способ справиться с этим ... Может быть, я мог бы еще раз проверить в какой-то другой момент, существует ли объект?

Или, может быть, есть лучший способ сделать это, когда мне не нужно потенциально блокировать браузер?

Ответы [ 3 ]

1 голос
/ 12 марта 2010

Из организации вашего кода я предполагаю, что вы используете объект для хранения ваших методов. Если это так, то вы можете использовать пользовательские события, такие как:

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);
0 голосов
/ 12 марта 2010
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;
  }

  });


 }

Вам необходимо вернуть значение внутри функции обратного вызова, в противном случае он запустит запрос и сразу же вернется.

0 голосов
/ 12 марта 2010

См. jQuery.ajax () : Сделать async ложным.

По умолчанию все запросы отправляются асинхронно (т.е. по умолчанию установлено значение true). Если вам нужны синхронные запросы, установите для этого параметра значение false. Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.

...