2011-01-15 5 views
1

У меня есть вызов ajax и хотел бы напомнить его, как только я закончу синтаксический анализ и оживление результата на странице. И вот где я застреваю.Javascript Recursion

Я смог вспомнить функцию, но, похоже, не учитывает задержки в анимации. т. е. консоль продолжает выдавать значения в диком темпе.

Я думал setInterval может помочь с интервалом как сумма длины моих задержек, но я не могу получить, чтобы работать ...

function loadEm(){ 
    var result=new Array();  
    $.getJSON("jsonCall.php",function(results){ 
     $.each(results, function(i, res){ 
      rand = (Math.floor(Math.random()*11)*1000)+2000; 
      fullRand += rand; 
      console.log(fullRand); 
      $("tr:first").delay(rand).queue(function(next) { 
      doStuff(res); 
       next(); 
      }); 
     }); 
     var int=self.setInterval("loadEm()",fullRand); 
    }); 
    } 
}); 

ответ

3
  1. использование setTimeout. setInterval будет звонить снова ... и снова ... и снова ...

  2. var fullRand в верхней части loadElm (или внутри обратного вызова JSON). Без него вы будете увеличивать ту же глобальную переменную каждый раз, когда вызывается loadElm. Фактически, вы должны использовать var с всеми вашими локальными переменными, которые включают в себя rand здесь. The Jibbering JavaScript Closure Notes охватывает переменные и многое другое.

  3. использование setTimeout(loadElm, fullRand) - не используйте строку в первом параметре :) См. MDC setTimeout documentation.

  4. Проверка на наличие ошибок JavaScript (держать Firebug/инструменты разработчика IE/консоль ошибок удобно)

  5. Вместо использования setTimeout, считают сохранение счет того, сколько из анимации закончили против того, сколько общая закончили ! Представьте себе:

===

// closure in JSON callback. see Jibbering notes. 
var count = 0 
$.each(results, function(i, res) { 
    var rand = (Math.floor(Math.random()*11)*1000)+2000 
    count++ // have to do action 
    $("tr:first").delay(rand).queue(function(next) { 
    ... 
    count-- // action done 
    if (!count) { // means count == 0 here :-) then... 
     loadElm() // ...all actions done 
    } 
    }) 
}) 
if (!count) { 
    // err... no animations started :(
} 

Счастливый кодирования.

+0

Спасибо! Я его реализую и дам вам знать! – rpophessagr

+0

Подсчет действительно сделал трюк! Благодаря! – rpophessagr