2012-02-11 2 views
0

Я ищу, чтобы повторить эту функцию каждые пять секунд:Автоматическое повторение функции AJAX не работает

function check_votes(id) { 
     $.ajax({ 
      type: 'POST', 
      url: 'check_votes.php', 
      data: 'checkvotes='+id, 
      timeout: 0, 
      success: function(data) { 
      window.setTimeout(check_votes(id), 5000); 
      $('.vote_count_'+id).show(); 
      $('.vote_count_'+id).html("("+data+" votes so far)"); 
      } 
     }); 
     return false; 
    }; 

Почему не эта линия сделать трюк:

window.setTimeout(check_votes(id), 5000); 

В самом деле он ломает его, так что мне нужно использовать следующую строку:

window.setTimeout(check_votes, 5000); 

но это позволяет скрипт для запуска на начальном этапе, но я не автоматически повторять.

ответ

0
window.setTimeout(check_votes(id), 5000); 

неправильно, потому что check_votes(id) немедленно вызывает функцию, в то время как метод setTimeout ожидает, чтобы передать ему указатель на функцию в качестве первого аргумента.

window.setTimeout(check_votes, 5000); 

неправильно, потому что вы не передавая функцию check_votes параметр ID, и я думаю, ваши сбои вызова AJAX, как это его не хватает.

Так попробуйте следующее:

window.setTimeout(check_votes, 5000, id); 

Обратите внимание, как мы передаем параметр id к check_votes обратного вызова.

Вы можете передать произвольное число аргументов, используя эту перегрузку:

var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]); 
0

Вам нужно обернуть это в «анонимной функции»

window.setTimeout(function(){check_votes(id)}, 5000); 
Смежные вопросы