在页面加载期间使用pubnub和jquery / javascript从servlet更新值

时间:2012-03-20 10:54:38

标签: javascript jquery publish-subscribe pubnub

我是javascript和整个开发前端的新手。

以下是我正在使用的内容:

  • 在Tomcat7上运行的Java servlet
  • twitter-bootstrap for layout / theme
  • Pubnub跟踪表单提交的次数
  • Javascript / jquery在网页上显示此值。

我添加了PUBNUB.subscribe回调,它可以更新网页上的值。但是,当我第一次加载网页时,我不知道应该显示什么值。

以下是我为解决此问题所做的工作: 我向servlet添加了一个方法,当在POST请求中传入正确的参数时,它将发送一个pubnub消息,其中显示的数量正常。

接下来,我尝试使用jquery调用POST请求,如下所示:

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

我尝试将它放在$(窗口).load函数中但是当我加载网页时,它没有按照我的预期进行。 我希望它在加载所有内容后执行POST,这将导致从servlet发布pubnub消息,这将激活PUBNUB.subscribe函数中的回调方法。但是,值没有改变,它仍然是html中硬编码的占位符。

目前,我正在调用setTimeout(“updateUses()”,1500);来自$(window).load函数。 updateUses()与我之前展示的完全相同的$ .post调用。

现在当我加载页面时,占位符值有一点点(似乎长于1.5ms),然后它会更新为正确的值。如果我删除setTimeout并直接调用updateUses(),则不会再发生任何事情。

我需要更改什么才能立即加载值(或者至少没有明显的延迟)?

1 个答案:

答案 0 :(得分:2)

如果页面构建器是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通常写在这样的包装器中。