gpt4 book ai didi

Java servlet doGet() 在第一次调用后不刷新

转载 作者:行者123 更新时间:2023-11-28 19:29:34 25 4
gpt4 key购买 nike

我正在按设定的时间间隔对 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/>");
}
}

});


}

最佳答案

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

避免缓存影响的几种方法:

  • 禁用它们(通常不是一个好主意,因为它会影响性能)。
  • 使用 HTTP header 向浏览器发出信号,表明不应缓存内容/之前缓存的数据已过时。
  • 对于 AJAX,请使用 cache: false 参数。
  • 如果上述所有方法均失败,请在 URL 中添加一个虚假参数,以便浏览器将其解释为不同资源的请求(v.g., url: "getChat"+ (new Date()).getTime( ))

关于Java servlet doGet() 在第一次调用后不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27135559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com