#javascript #reload #flush
#javascript #перезагрузка #сброс
Вопрос:
Вот моя проблема: у меня есть фрагмент кода, который проходит очередь, чтобы получить содержимое базы данных, и выводит в браузер с использованием неявного сброса, как только достигнут конец кода, мне нужно обновить страницу, чтобы обработать следующий элемент в очереди. Сначала я попробовал команду заголовка, но, очевидно, это не сработало, поскольку отображаемая страница содержит содержимое. Я также попытался добавить готовый документ javascript с location.reload(true); в нем, но он не срабатывает. Поэтому я предполагаю, что этот файл я хочу сделать рекурсивным, пока элементы находятся в очереди. Вот упрощенная версия файла удаления из очереди
include( './dbcnn.php' );
// Autoloader
include( './autoloader.php' );
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i ) { ob_end_flush(); }
ob_implicit_flush(1);
$startTime = time();
if ( $myQueue->size() > 0 ) {
$is_locked = @mkdir(DOCROOT . '/logs/eclipse.lock');
}
if ( $is_locked === true amp;amp; $myQueue->size() > 0 ) {
$action = "Started";
echo $action . PHP_EOL . PHP_EOL;
echo str_pad('',4096)."n";
$item = $myQueue->bottom();
$data = unserialize( $item, ['BackupQueue'] );
$clientid = $data[ 'id' ];
...
[run tasks echoing results as they finish]
[remove from queue and remove locked flag file]
...
// Tasks have finished get the next one item from the queue, if there is one.
//header("Refresh:1");
echo '<script> $( document ).ready( function() { location.reload( true ); } ); </script>';
}
Как я могу просто перезагрузить страницу, когда все действия завершены? Этот раздел кода в настоящее время привязан к cron, который выполняется каждую минуту, но это кажется расточительным, поскольку очередь тратит 66% дня на пустую (она выполняет некоторые ночные задачи)
Как я уже сказал, он доходит до конца и останавливается, и если при использовании команды header он сообщает, что заголовки уже отправлены, тег script присутствует в содержимом страницы. Я, конечно, понимаю, что мог бы поместить все это в цикл while или что-то в этом роде, но почему это не работает? Я полагаю, что размещение перезагрузки в разделе заголовка просто перезагрузит страницу без запуска задач (из-за сброса?)
Спасибо
** РЕДАКТИРОВАТЬ ** Решение, приведенное ниже из mrcoder, сработало (окно.location.reload();)
Комментарии:
1.
window.location.reload()
не сработало? пожалуйста, попробуйте удалить$( document ).ready( function()
.2. Ах да, используя полное окно. location.reload() сработал, тогда как location.reload() не сработал
3. Отлично! Счастливого кодирования.