第一次调用后,Java servlet doGet()没有刷新

时间:2014-11-25 19:57:16

标签: java javascript ajax servlets

我以设定的间隔对Java servlet进行AJAX调用。在doGet中,它查询数据库,将结果放入JSON格式,然后返回它们。这在第一次尝试(首次加载或刷新页面时)时效果很好,但在每次ajax调用之后,即使添加了内容,它也会返回与第一次调用相同的数据。

的Servlet

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    System.out.println("in");

    Connection con = null;
    Statement stmt = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection(
                DB_URL, USER, PASS);
        stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("Select * from chatroom");
        JSONObject jsonPosts = new JSONObject();
        JSONArray postList = new JSONArray();
        JSONObject post;

        while (rs.next()) {
            post = new JSONObject();
            post.put("user", rs.getString("user"));
            post.put("text", rs.getString("text"));
            post.put("time", rs.getString("time"));

            postList.add(post);
        }

        System.out.println(postList.toString());

        response.setContentType("application/json");

        response.getWriter().write(postList.toString());

        stmt.close();
        con.close();
    } catch (ClassNotFoundException cnfe) {
        cnfe.printStackTrace();
    } catch (SQLException sqe) {
        sqe.printStackTrace();
    }

}

使用Javascript:

            setInterval(function () {

                getChat();

            }, 6000);


                function getChat() {

                var posts;
                $.ajax({
                    type: "GET",
                    url: "getChat",
                    data: "position=hi",
                    datatype: "json",
                    success: function (data) {



                        for (var i = 0; i < data.length; i++)
                        {
                            $("#chatWindow").append(data[i].text + "<br/>");
                        }
                    }

                });


            }

1 个答案:

答案 0 :(得分:3)

重复相同请求时获取相同的数据通常是缓存问题(让它在浏览器,服务器或代理中)。

避免缓存效果的几种方法:

  • 禁用它们(通常不是一个好主意,因为它会对性能产生影响)。
  • 使用HTTP标头向浏览器发出不应缓存内容/先前缓存数据过时的信息。
  • 对于AJAX,请使用cache: false参数。
  • 如果以上所有方法均失败,请向网址添加虚假参数,以便浏览器将其解释为其他资源的请求(例如,url: "getChat" + (new Date()).getTime()