java-скрипт - используйте менеджер событий для обновления страницы при обнаружении строки - PullRequest
0 голосов
/ 10 мая 2018

Я уже использую этот фрагмент кода для обновления кодового поля на странице с данными, полученными с помощью dyntask.php.

<script type="text/javascript">
if(typeof(EventSource)!=="undefined") {
    var eSource = new EventSource("dyntasks.php");
    eSource.onmessage = function(event, previous) { 
        document.getElementById("serverData").innerHTML = event.data; 
    };
}
</script>

Данные, собранные с помощью dyntask.php, извлекаются из текстового файла.

2018-05-10 14:02:01: starting task 99333
2018-05-10 14:02:03: task 99333 completed
2018-04-13 15:13:44: triggered tasks
2018-05-10 14:05:52: starting task 99334
2018-05-10 14:05:57: task 99334 completed
2018-05-10 14:11:01: starting hidden task 99335
2018-05-10 14:11:07: hidden task 99335 completed
updating...

Последняя строка текстового файла всегда "обновляется ...". Что мне нужно сделать, это постоянно проверять содержимое строки перед последней

  • проверка должна начинаться каждый раз, когда в строке присутствует ключевое слово "старт"
  • когда клавиатура найдена, скрипт должен начать проверку на наличие слова «выполнено»
  • когда слово "завершено" найдено, скрипт должен обновить всю страницу

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

Не могли бы вы мне помочь? 1019 *

Джованни - Италия, Рим

РЕШЕНИЕ НАЙДЕНО!

<script type="text/javascript">
if(typeof(EventSource)!=="undefined") {
    var eSource = new EventSource("dyntasks.php");
    eSource.onmessage = function(event, previous) { 
        document.getElementById("serverData").innerHTML = event.data; 
        var contents = event.data.split('<br/>') ;
        if(contents[6].indexOf('completed') !== -1 && contents[6] != localStorage.getItem('previous') && previous !== '') {
            window.location.href = '/index.php?id=taskmanager';
        };
        localStorage.setItem('previous', contents[6]);
    };
}
</script>

1 Ответ

0 голосов
/ 10 мая 2018

Я не уверен, какой формат вам нужен, и регулярное выражение может использовать некоторые уточнения, но это должно, по крайней мере, дать вам возможность получить значение из последней строки перед текстом "update ...".

var text = `2018-05-10 14:02:01: starting task 99333
2018-05-10 14:02:03: task 99333 completed
2018-04-13 15:13:44: triggered tasks
2018-05-10 14:05:52: starting task 99334
2018-05-10 14:05:57: task 99334 completed
2018-05-10 14:11:01: starting hidden task 99335
2018-05-10 14:11:07: hidden task 99335 completed
updating...`;
var regex = /(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}:)(.*?)\n(updating)+/;

var result = regex.exec(text);

document.write(result[1] + ' ' + result[2]);
...