2010-03-12 98 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

相關問題