2010-09-14 82 views
0

我有一個jQuery每個方法的問題。jquery - 每個準備就緒時啓動功能

我的對象

first_obj = {}; 
first_obj[11] = new Array('http://blub.de', 'hsdfe', 'hsdfe'); 
first_obj[54] = new Array('http://blub.de', 'sdfe', 'hsdfde'); 
first_obj[99] = new Array('http://blub.de', 'sdf', 'sdfde'); 

取得成果,並將其插入對象 「second_obj_results」

second_obj_results = {}; 
    $.each(first_obj, function(i, val) 
    {  
     var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml"); 
     feed.load(function(result) { 
     if (!result.error) { 
      var container = document.getElementById("feed"); 
      for (var i = 0; i < result.feed.entries.length; i++) 
      { 
      second_obj_results[id] = new Array(''+rsd+'', ''+rtitle+'', ''+fege+''); // Create new obj with the results 
      } 
     } 
    )}; 
    read_new_obj(); 

,這裏是我的問題

,當我說read_new_obj(); ... // d ONT工作

當我說setTimeout('read_new_obj();',2000); ... //它的工作原理

讀取新的OBJ

function read_new_obj() 
{ 

    $.each(second_obj_results, function(i, val) 
    { 


    // do something 

    }); 


}  

我認爲問題是, 「得到結果」 還沒有結束。但Timeout的解決方案非常糟糕。 「獲得結果」可能需要2秒以上的時間。

我怎麼說,如果「每個first_object」準備好了 - >啓動函數「read_new_obj」?

提前致謝! 彼得

PS:?對不起,我的英語不好:(

回答

1

它看起來像feed.load()需要一個回調函數作爲參數,我想,當數據到達這個回調觸發
如果是這樣的話,把你的read_new_obj()方法直接進入該回調。

feed.load(function(result) { 
    if (!result.error) { 
     var container = document.getElementById("feed"); 
     for (var i = 0; i < result.feed.entries.length; i++) 
     { 
     second_obj_results[id] = new Array(''+rsd+'', ''+rtitle+'', ''+fege+''); 
     } 
     read_new_obj(); 
    } 
)}; 

我不知道google ajax api非常好,但我敢肯定​​將推出asynchronous request。所以你在​​函數完成之前執行。

+0

嗨jAndy,它的工作,但功能啓動3次。 – Peter 2010-09-14 09:38:02

+0

我明白了。 - > google.setOnLoadCallback()。 http://translate.google.de/translate?hl=de&sl=auto&tl=zh-CN&u=http%3A%2F%2Fwww.betawax.de%2Fblog%2F2010%2F03%2Fjquery-ready-google-load%2F – Peter 2010-09-14 09:43:44

+0

@Peter :這應該是你想要的結果。您正在循環包含三個entrys的'first_obj'。那麼,但它看起來像你不使用這些信息,很混亂。我期待着您使用first_obj數組中的第一個條目來訪問該網址。 – jAndy 2010-09-14 09:49:22