Автоматически повторяющаяся функция AJAX не работает - PullRequest
0 голосов
/ 11 февраля 2012

Я хочу повторять эту функцию каждые пять секунд:

  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);

Но это позволяет запустить сценарий изначально, но я не получаю автоповторения.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

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

window.setTimeout(function(){check_votes(id)}, 5000);
0 голосов
/ 11 февраля 2012
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, ...]);
...