Mesuti
@Mesuti

Постоянное обновление в реальном времени куска кода, полученного по XMLHttpRequest?

Привет!
Пробую сделать динамический интерфейс.
Меню:
<ul>
<li data="one.php">One</li>
<li data="two.php">Two</li>
<li data="three.php">Three</li>
</ul>

При клике на пункт меню, страница не обновляется.
А происходит загрузка маленьких страниц-заготовок с помощью xhr.open('GET', 'one.php', false);
И вставка содержимого из этих страниц-заготовок в блок на главную страницу с помощью element.innerHTML = xhr.responseText;
Полный XMLHttpRequest

function getContent() {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', xhrURL, false);
        xhr.send();
        if (xhr.status !== 200) {
            console.log('Ошибка загрузки');
        } else {
            containerFluid.innerHTML = xhr.responseText;
        }
    }


ВОПРОСЫ:
1) Как поддерживать постоянную связь с этими страницами-заготовками?
Чтобы все изменения показывались на главной странице без перезагрузки.

2) Насколько будет правильным обвернуть все в setInterval?
Пример

setInterval(
        function getContent() {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', xhrURL, false);
            xhr.send();
            if (xhr.status !== 200) {
                console.log('Ошибка загрузки');
            } else {
                containerFluid.innerHTML = xhr.responseText;
            }
        }
        , 2000);



3) или вообще не XMLHttpRequest использовать?
например, websocket, но насколько он будет правильным и кроссбраузерным решением?
  • Вопрос задан
  • 119 просмотров
Решения вопроса 2
@rPman
если у вас 1 клиент, то setInterval - нормально, иначе нагрузка на сервер квадрат от количества пользователей

Правильно
- использовать (устаревший способ) - http long pooling (когда клиент спрашивает у сервера, есть ли события, а тот удерживает соединения, выдавая туда пробелы раз в минуту, а как появится событие - выдает его и закрывает http, т.е. клиент тут же его переоткрывает для следующего)
- либо, лучший способ - websocket, примеры ищите их тьма, но нужно чтобы сервер был websocket, настоятельно рекомендую, если вам надо php - phpreact
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы