Refre sh страница только если нет взаимодействия с пользователем или ввода - PullRequest
0 голосов
/ 30 марта 2020

В настоящее время я работаю над небольшим веб-приложением, которое также имеет небольшую минималистичную функцию c для чата.

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

Теперь, чтобы проверить наличие новых сообщений, я подумал о том, чтобы просто обновлять страницу каждые x секунд, например, каждые 20 секунд. Я также подумал об использовании AJAX, однако тогда мне нужно было бы перестроить весь чат, который в основном использовал бы тот же объем данных и c, так что это не улучшило бы ситуацию (поправьте меня, если Я не прав).

Возвращаясь к идее refre sh, я использовал следующий код (найденный в другой ветке StackOverflow), чтобы не дать странице обновить sh, когда пользователь печатает в тот момент:

(function(seconds) {
    var refresh,       
        intvrefresh = function() {
            clearInterval(refresh);
            refresh = setTimeout(function() {
               location.href = location.href;
            }, seconds * 1000);
        };

    $(document).on('keypress click', function() { intvrefresh() });
    intvrefresh();

}(15)); // amount of seconds

Теперь это работает нормально, но у меня есть 2 "проблемы" с ним.

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

  2. Страница не должна обновлять sh, если что-то написано внутри ввод (пользователь что-то набирает, собирается куда-то 5 минут и хочет продолжить). Я попытался просто вставить

    if($('#newMessageInput').val()=="")

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

Можете ли вы дать мне представление о том, что делать, чтобы получить поведение, которое мне нужно? В любом случае AJAX будет лучше? Каков был бы лучший способ сделать это тогда?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...