Недавно я реализовал "COMET-подобную" функциональность, чтобы сделать это. Для этого нужно провести опрос AJAX с длительным тайм-аутом:
var lines = 0
function getLog(file, lines) {
$.ajax({
type: 'POST',
url: 'http://thissite.com/getLogFile.php?File=' + file + '&Lines=' + lines,
dataType: 'json',
timeout: 400000,
error:
function() {
return false;
},
success:
function(data) {
if (data.Error) {
alert(data.Message)
} else {
if (data.Lines > lines) {
// do something with data.LogLines, e.g. add to a textarea
}
getLogFile(file, data.Lines)
}
}
})
}
Скрипт-сервер затем просто зацикливается так:
- Подсчет количества строк в файле журнала
- Если это так же, как строки, спать (скажем, на секунду), а затем вернуться к 1
- Если количество строк больше, вернуть новые строки и количество новых строк и выйти
- После некоторого количества итераций (я использую 100) выйдите и верните существующий счетчик строк
Структура данных, возвращаемая внутренним сценарием, представляет собой JSON:
{
Error: // 0 or 1,
Lines: // Number of lines
Text: // New lines from log file
}
Это работает так же, как 'tail -f' в UNIX, но в браузере!