0

基本上我正在做的是检查对象是否存在,如果找不到,脚本将尝试使用 getScript 加载源文件。我只想检查一次,然后向调用 fetch() 的函数返回 true 或 false

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

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

   });

   return isReady;

   }

但是在脚本加载之前返回就开始了=/

稍后脚本被加载,但函数返回 false。

我想这就是异步的美妙之处......

处理这个问题的最佳方法是什么......也许我可以在其他时候再次检查对象是否存在?

或者也许有更好的方法来做到这一点,我不必锁定浏览器?

4

3 回答 3

1

从您的代码组织来看,我猜您正在使用一个对象来包含您的方法。如果是这样,那么您可以使用这样的自定义事件:

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);
于 2010-03-12T13:34:29.463 回答
0

请参阅jQuery.ajax():设为async假。

默认情况下,所有请求都是异步发送的(即默认设置为 true)。如果您需要同步请求,请将此选项设置为 false。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作。

于 2010-03-12T09:22:41.053 回答
0
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;
  }

  });


 }

您需要在回调函数中返回值,否则它将启动请求然后立即返回。

于 2010-03-12T09:27:33.370 回答