Я пытаюсь реализовать запрос AJAX как часть WebApplication. На стороне сервера требуется длительное время, чтобы обработать запрос полностью, но он может выводить отдельные элементы результата очень рано. Таким образом, я хочу, чтобы клиентская сторона отображала части ответа сразу же после их появления и не дожидалась завершения ответа.Обработка большого медленного входящего ответа ajax в реальном времени
Вот моя (упрощенный) на стороне сервера код:
for (myObj o : db.results()) {
// some rather slow operations at this place
JSONObject j = new JSONObject();
j.put("tag1", o.tag1());
j.put("tag2", o.tag2());
System.out.println("Sending partial response: " + j.toString());
response.getWriter().write(j.toString());
response.getWriter().flush();
}
Мой запрос JQuery на стороне клиента будет выглядеть примерно так:
$.ajax({
type: "GET",
url: "queryURL",
dataType: "text",
success: function (data) {
alert("received " + data);
}
});
К сожалению, успех-функция выполняется только один раз ответ выполнен. Я не мог найти способ выполнить функцию для каждого вызова response.getWriter().write()
. Есть ли способ сделать это?
Я думаю, вам нужно работать на стороне сервера и разделить ответ небольшими порциями. – Alepac
Я не думаю, что есть способ сделать то, что вы просите, чтобы эффективно передавать ответ клиенту. Я думаю, что несколько вызовов ajax - лучшее, что вы получите. – Archer
Перейти на веб-сайт или на длительный опрос. – pdegand59