2012-11-12 191 views
0

我有一个问题。在将这些代码放在我的jsp上后,我仍然可以看到我的缓存仍在增加。jquery和jsp - 仍然保存在缓存甚至缓存:false和response.setHeader(“缓存控制”,“无缓存”)

<% response.setHeader("Cache-Control", "no-cache"); %> 

和我的JavaScript/jQuery的驻留在同一个JSP:

function waitForMsg() { 
    $.ajax({ 
     type: "GET", 
     url : contextPath + "/groupChat", 
     async: true, 
     cache: false, 

     success: function (data) { 
      $("#divChatMessageTable").load(contextPath + "/groupChat/message"); 
      setTimeout(waitForMsg, 1000); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      setTimeout(waitForMsg, 15000); 
     } 
    }); 
    if ($("#divChatMessageTable").height() > tableHeight) { 
     scrollToBottomChat(); 
     tableHeight = $("#divChatMessageTable").height(); 
    } 
} 

我已经设置了jQuery的cache:false

顺便说一句,我使用Firefox。

请帮忙。

+0

之前什么是第一为宗旨ajax调用..它不发送任何数据,对任何响应都不做任何处理?还应该将'setTimeout'移动到'load'的成功回调,以便有一段时间进行该调用。类似地,您正试图在加载新内容之前测试新内容的高度,并且它应该在'load'的成功回调中完成也 – charlietfl

+0

@charlietfl它远在其工作。它是一个简单的聊天。它每秒钟都会调用查询。我对这件事情真的很陌生。你能否贴一些你建议的代码?我尝试了你的建议,但似乎我不知道该怎么做。谢谢。 – TheOnlyIdiot

+0

行..好吧,你能解释为什么或者如果调用'contextPath +“/ groupChat”'是必要的......它什么都不发送,并且对响应没有任何作用......可以删除它,只需用回调检查表高度 – charlietfl

回答

0

我已通过添加no-store, must-revalidate解决了该问题。

代码:

<% response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); %> 
1

可以容易摆脱最初的Ajax调用,并只保留load调用(这也是阿贾克斯)。下面的一个区别是增加了成功回调至load方法,这样你就不会测试新内容的高度已经插入

function waitForMsg() { 

    $("#divChatMessageTable").load(contextPath + "/groupChat/message", function({ 
     /* new content now exists*/ 
     if($("#divChatMessageTable").height() > tableHeight) { 
      scrollToBottomChat(); 
      tableHeight = $("#divChatMessageTable").height(); 
     } 
     setTimeout(waitForMsg, 1000);  
    }); 


} 

API refrence为loadhttp://api.jquery.com/load/

+0

它的工作和它更简单。你是天才! – TheOnlyIdiot

+0

我认为你有更多的时间重叠比缓存问题。我以前从来没有使用过jQuery的缓存问题。ajax – charlietfl

+0

我知道这可能是无关紧要的,但我想知道是否有一个ajax函数仅在客户端向服务器发布数据时才会加载数据。我的意思是我想摆脱计时器,因为它不断调用一个我认为不适合服务器的查询。我不确定。 – TheOnlyIdiot