Обновление значения из сервлета с помощью pubnub и jquery / javascript во время загрузки страницы - PullRequest
0 голосов
/ 20 марта 2012

Я новичок в javascript и всей внешней стороне разработки.

Вот что я использую:

  • Java-сервлет, работающий на Tomcat7
  • twitter-bootstrap для макета / темы
  • Pubnub для отслеживания того, сколько раз отправляется форма
  • Javascript / jquery для отображения этого значения на веб-странице.

Я добавил обратный вызов PUBNUB.subscribe, который прекрасно обновляет значение на веб-странице. Однако, когда я впервые загружаю веб-страницу, я не знаю, какое значение я должен отобразить.

Вот что я сделал, чтобы преодолеть эту проблему: Я добавил метод к сервлету, который при передаче правильного параметра в запросе POST отправляет сообщение pubnub с отображаемой суммой, которая работает нормально.

Затем я попытался вызвать POST-запрос, используя jquery, например:

$.post("../servlets/theservlet",
        {
            update : "true"
        });

Я попытался поместить это в функцию $ (window) .load, но когда я загрузил веб-страницу, она не сделала то, что я ожидал. Я ожидал, что это сделает POST после того, как все будет загружено, что приведет к публикации сообщения pubnub из сервлета, что активирует метод обратного вызова в функции PUBNUB.subscribe. Однако значение не изменилось, оно осталось заполнителем, жестко закодированным в html.

В настоящее время я сейчас вызываю setTimeout ("updateUses ()", 1500); из функции $ (window) .load. updateUses () - это точно такой же вызов $ .post, который я показал ранее.

Теперь, когда я загружаю страницу, значение заполнителя там немного (кажется, больше 1,5 мс), а затем оно обновляется до правильного значения. Если я удаляю setTimeout и просто вызываю updateUses () напрямую, то больше ничего не происходит.

Что мне нужно изменить, чтобы оно загружало значение мгновенно (или, по крайней мере, без заметной задержки)?

1 Ответ

2 голосов
/ 20 марта 2012

Если компоновщик страниц - JSP, и то, что я только что прочитал, правильно, тогда вы должны быть в состоянии сделать что-то вроде этого:

RequestDispatcher rd=application.getRequestDispatcher("path/to/pubnub/servlet");
rd.include(request,response);

Если вы решите придерживаться подхода ajax, тогда JavaScript долженвыглядит примерно так:

$(function(){
    $.post("path/to/pubnub/servlet", {update:"true"}, function(response){
        //do whatever is necessary with the response here, eg.
        //$("#myElementId").html(response);
    });
});

Оболочка $(function(){...}) обеспечивает выполнение кода внутри нее при первой возможности после того, как DOM будет готов.Следовательно, нет необходимости в тайм-ауте.jQuery обычно пишется внутри такой оболочки.

...