0

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

这是我正在使用的:

  • 在 Tomcat7 上运行的 Java servlet
  • 用于布局/主题的 twitter-bootstrap
  • Pubnub 跟踪表单提交的次数
  • Javascript/jquery 在网页上显示此值。

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

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

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

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

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

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

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

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

4

1 回答 1

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 通常是在这样的包装器中编写的。

于 2012-03-20T15:08:52.997 回答