Мне нужно изменить содержимое веб-страницы без обновления, где изменение происходит на стороне сервера - PullRequest
0 голосов
/ 23 апреля 2019

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

setInterval(function() { 
    $.get("log", function(responseText) {
        $("#container").append(responseText + "<br>");
    });
}, 10);

log - это URL сервлета, который предоставляет информацию о запросе. Метод doGet лог-сервлета:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/plain");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(requestInfo);
}

каждый раз, когда приходит запрос, я начинаю вводить информацию в requestInfo

1 Ответ

0 голосов
/ 23 апреля 2019

Если вы хотите постоянно проверять статус, вы должны вызвать функцию ajax.Если вы хотите получать уведомления от push, вы должны использовать веб-сокеты.

function checkLog(){
$.get("log", function(responseText) {
        var $notFinished = true;
        console.log('fetch from server')
        $("#container").append(responseText + "<br>");


        // do some checks to determine server has finished, set notFinished to false if it is your last ajax request
        ...

        if($notFinished){
          // recall the function in 10 seconds for status check
          setInterval(function() { 
            checkLog();
          }, 10000);
        }
    });
}

// call the function the first time
checkLog();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...