有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用XMLHttpRequest每5秒在JS中发送一次空请求,并在Internet Explorer 9中返回304

我正在用java编写一个web应用程序。在我的html文件中,我有一个小javascript,它每五秒钟向服务器发送一个空请求以保留会话(心跳)

我正在使用XMLHttpRequest对象将请求发送到Tomcat服务器

问题是,在IE9中,对于第一个请求,我得到状态200,之后,对于每个请求,我得到304答案。在Firefox和Chrome中,它运行良好

我怎么能在IE中不断地从Javascript发送空请求而不获取304

我的代码是:

<script>
var HeartBeatTimer; 
function StartHeartBeat(){
   // pulse every 30 seconds
    if (HeartBeatTimer == null)
      HeartBeatTimer = setInterval("HeartBeat()", 1000 * 5);
}

function HeartBeat(){
            var HTTP_Response = new XMLHttpRequest();
    HTTP_Response.open("GET", myurl , true);
    HTTP_Response.send(null);    
}

my servlet that get the request:

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

}

此脚本的目的是使会话保持活动状态


共 (3) 个答案

  1. # 1 楼答案

    使用以下命令:

    HTTP_Response.open("GET", myurl + "&rand=" + Date.now(), true)
    
  2. # 2 楼答案

    可以通过发送以下HTTP头来禁止缓存:

    response.setHeader("Pragma", "no-cache");
    response.setDateHeader("Expires", 1L);
    response.setHeader("Cache-Control", "no-cache");
    response.addHeader("Cache-Control", "no-store");
    
  3. # 3 楼答案

    要么向url添加随机部分,要么发送POST请求

    myurl = myurl + "?_=" + (+new Date());
    

    或者

    HTTP_Response.open("POST", myurl, true);
    

    对于POST-版本,还需要调整servlet代码

    不要使用字符串作为setIntervalsetTimeout的第一个参数。只需传递函数本身

    setInterval(HeartBeat, 1000 * 5);