我以设定的间隔对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/>");
}
}
});
}
答案 0 :(得分:3)
重复相同请求时获取相同的数据通常是缓存问题(让它在浏览器,服务器或代理中)。
避免缓存效果的几种方法:
cache: false
参数。url: "getChat" + (new Date()).getTime()
)