цикл javascript сходит с ума - PullRequest
0 голосов
/ 10 марта 2012

У меня есть простой цикл javascript на моей странице php, который просто добавляет 1 к значению каждую секунду. Ну, цикл запускается каждую секунду и увеличивает значение.

var test = 0;

function go() {
  test = test + 1;
  setTimeout(go, 1000);
  }

go();

Это отлично работает.

Проблема в том, что страница PHP, на которой она запускается, фактически находится внутри тега div, который обновляется каждые 10 секунд. Через 10 секунд счетчик теряет значение, добавляя 2 каждую секунду, затем 3, затем 4 и т. Д.

Как я могу это остановить?

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

Учитывая, что проблема заключается в том, что ваша функция запускается несколько раз и увеличивается при каждом обновлении / обновлении страницы, я бы рекомендовал добавить проверку работоспособности в вашу функцию:

var test = 0;
var running = running || false;

function go() {
    if (running) {
        // if an instance of go() is already running, the function quits
        return false;
    }
    else {
        running = true; // as the test variable survives I assume this will, too
        test = test + 1;
        setTimeout(go, 1000);
    }
  }

go();

Поскольку вполне вероятно, что test будет перезаписываться при каждом обновлении страницы, я бы рекомендовал, чтобы назначение не перезаписывало ранее существовавший счет:

var test = test || 0;
var running = running || false;

function go() {
    if (running) {
        // if an instance of go() is already running, the function quits
        return false;
    }
    else {
        var running = true; // as the test variable survives I assume this will, too
        test = test + 1;
        setTimeout(go, 1000);
    }
  }

go();

Имейте в виду, что вы можете просто использовать наличие переменной test, чтобы определить, работает ли функция в настоящее время или нет, но я не знаю, будете ли вы использовать ее для других целей. выбран для создания другой переменной для этой цели (которая должна содержать либо true, либо false логические значения).

1 голос
/ 10 марта 2012

Изменение: go() на if(!test){ go() }

Вам также нужно будет исправить вашу переменную test. Итак var test = test || 0;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...