Jquery - функция запуска, когда каждый готов - PullRequest
0 голосов
/ 14 сентября 2010

У меня проблема с каждым методом 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(); ... // не работает

и когда я говорю setTimeout('read_new_obj();',2000); ... // это работает

Прочтите новый объект

function read_new_obj()
{

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


    // do something

    });


}       

Мне кажется, проблема в том, что «Получить результаты» не закончено. Но решение с Timeout очень плохое. Возможно, что для «получения результатов» потребуется больше времени, чем 2 секунды.

Как я могу сказать, если "каждый первый_объект" готов -> Запустить функцию "read_new_obj"?

Заранее спасибо! Питер

PS: простите за мой плохой английский: (* ​​1034 *

1 Ответ

1 голос
/ 14 сентября 2010

похоже, что 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, но я уверен, что .load() запустит asynchronous request. Таким образом, ваш read_new_obj() выполняется до завершения функции .load().

...