Автообновление информации на странице
Добрый день!
Прошу помощи в моем вопросе. Задача следующая - есть скрипт php, выполняющий сложную задачу, в результате выводящий число в процентах, равным прогрессу выполнения скрипта. Необходимо на странице организовать код javascript, который будет отправлять get-запрос к скрипту и выводить результат на страницу, обновляя его через заданный интервал времени. То есть получаем текст, выводящийся например на gif анимации загрузки. Когда php скрипт возвращает 100 - выводим текст "Загрузка завершена" и останавливаем скрипт. Если скрипт возвращает 0 - выводим ошибку. Прошу помощи, моих познаний в JS пока не достаточно для полного написания данного скрипта. |
Цитата:
Цитата:
Далее поможет статья https://learn.javascript.ru/basic-do...т-textcontent |
Вот "родил" такой скрипт.
Он получает ответ из test.php и выводит его в блок <div> С циклом ковыряюсь - пока никак не получается (( Добавляю цикл for в функцию - она останавливается после первой интерации
<html><body onload="show()">
<script>
function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function show() {
var req = getXmlHttp()
var statusElem = document.getElementById('progress')
req.onreadystatechange = function() {
if (req.readyState == 4) {
statusElem.innerHTML = req.responseText;
if(req.responseText == 100) {
statusElem.innerHTML = "Выполнение задания завершено";
}
}
}
req.open('GET', 'test.php', true);
req.send(null); // отослать запрос
statusElem.innerHTML = 'Ожидаю ответа сервера...'
}
</script>
<div id="progress">Здесь будет ответ сервера</div>
</body></html>
|
Цитата:
Цитата:
<body onload="setTimeout(show,<время_ожидания>)"> При получении ответа, если процесс не завершен, делаешь аналогичный вызов... |
Цитата:
|
Хотя нет... Немного перестроив принцип работы самого скрипта, подойдет.
Вроде бы разобрался. Работает. Если что то не так - подправьте, пожалуйста.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
var eventSource;
function start() { //
if (!window.EventSource) {
alert('В этом браузере нет поддержки EventSource.');
return;
}
eventSource = new EventSource('test.php');
eventSource.onopen = function(e) {
// соединение открыто
};
eventSource.onerror = function(e) {
if (this.readyState == EventSource.CONNECTING) {
} else {
log("Ошибка, состояние: " + this.readyState);
}
};
eventSource.addEventListener('bye', function(e) {
eventSource.close();
log("Выполнение задания завершено");
}, false);
eventSource.onmessage = function(e) {
console.log(e);
log(e.data);
};
}
function stop() {
eventSource.close();
log("Соединение завершено");
}
function log(msg) {
logElem.innerHTML = msg + "<br>";
}
</script>
</head>
<body onload="start()">
<div id="logElem"></div>
</body>
</html>
файл test.php
<?php
header ('Content-Type: text/event-stream; charset=utf-8');
$data = file_get_contents ( 'temp.txt' );
echo "data: " . $data . "%\r\n\r\n";
if ( $data == 100)
{
echo "event: bye\r\n";
echo "data: 100\r\n\r\n";
file_put_contents ( 'temp.txt', 95 );
exit;
}
file_put_contents ( 'temp.txt', $data + 1 );
?>
|
| Часовой пояс GMT +3, время: 07:29. |