Javascript: установить интервал функции в другом файле php

У меня есть простая функция javascript, которая каждую секунду запускает файл meta_data.php. Файл meta_data.php содержит простой запрос к базе данных. Если возврат этого запроса к базе данных является определенным значением, я хочу остановить выполнение файла meta_data.php. Итак, мой план - просто очистить Интервал функции check_data в файле meta_data.php.

Можно ли установить Интервал функции check_data из файла meta_data.php? Если да, то как я могу это сделать?

<script>
$(document).ready(function {
    setInterval(function check_data () {
        $('#p_data_info').load('https://demo/includes/meta_data.php')
    }, 1000);
});

Thanks for your help and time, Dave


person Dave    schedule 12.11.2018    source источник


Ответы (1)


Вы не можете остановить интервал прямо из PHP. Он работает на сервере, JS - на клиенте.

Лучше всего, чтобы сценарий PHP возвращал JSON, а не HTML. JSON может содержать флаг, указывающий, должен ли интервал продолжаться или нет, в дополнение к HTML в другом свойстве. Затем JavaScript проверяет флаг и отменяет интервал.

$(document).ready(function {
    var interval = setInterval(function check_data () {
        $.getJSON('https://demo/includes/meta_data.php', function(data) {
            if (data.stop) {
                clearInterval(interval);
            }
            $('#p_data_info').html(data.html);
        });
    }, 1000);
});

Другое решение - включить в HTML, возвращаемый meta_data.php, тег <script>, очищающий интервал. Поскольку этот HTML-код не работает в рамках этой $(document).ready() функции, вам нужно назначить интервал глобальной переменной, а не локальной переменной.

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

person Barmar    schedule 12.11.2018