2010-03-12 99 views
0

基本上我在做的是检查对象的存在,如果没有找到,脚本将尝试使用getScript加载源文件。我只希望一次虽然检查了这则返回true或false来调用取()如何让脚本在继续之前等待Ajax获取请求的状态?

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

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

    }); 

    return isReady; 

    } 

但=/

后脚本加载脚本加载,但该功能之前返回踢功能返回false。

这是异步的,我想的美...

什么是处理最好的办法......也许我可以在如果对象存在一些其他的点再次检查?

或者也许有更好的方式来做到这一点,我没有可能锁定浏览器?

回答

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

我做了类似这样的事情,而不是尝试触发自然继承,我把它作为成功处理程序。 – qodeninja 2010-03-15 18:20:19

0

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

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

+0

@codeninja你试过吗? – Skilldrick 2010-03-12 12:19:48

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

    }); 


} 

您需要返回的回调函数内的值,否则将启动该请求,然后返回立竿见影。

+0

这不起作用 - 它返回undefined。不错的尝试。大声笑。我也试过这个。 – qodeninja 2010-03-12 09:36:48

+0

编辑,尝试。 – freshnode 2010-03-12 09:39:54

+0

对不起,这仍然不会工作。 getScript触发异步调用,所以父函数在getScript可以调用其成功函数之前完成。 – qodeninja 2010-03-12 09:43:33

相关问题