本帖最后由 Fair_Jm 于 2012-07-24 19:24:43 编辑

解决方案 »

  1.   

    在你的show函数中,并没有看到任何ajax语句。
    浏览器环境 跟 应用服务器 完全是两个没有直接关系的运行环境。当应用服务器通过JSP+EL+Tag等生成了HTML给浏览器后,JS脚本就只能孤单的在浏览器中运行了,在此过程中,如果JS没有借助Ajax等重新跟服务器端发生交互,则根本无法得到服务器端任何新的信息。至于你说的application、request等对象,都是服务器端的对象。另外就是假设你正确的使用了Ajax,仍然得到的是旧数据,那么主要可能的原因是浏览器端缓存。
    解决这个问题的主要方法是在你Ajax请求的JSP或Servlet中,要明确要求浏览器缓存失效,比如:
        response.setHeader("Cache-Control", "no-cache, no-store"); //HTTP 1.1  
        response.setHeader("Pragma", "no-cache"); //HTTP 1.0  
        response.setDateHeader("Expires", 0); //prevents caching at the proxy server
      

  2.   

    不对哦 不是用ajax取得了旧数据 我把代码复制一下 不过我改过了有注释
     function createXMLHttp(){
     if(window.XMLHttpRequest()){
     xmlHttp=new XMLHttpRequest();
     }else{
     xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
     }
     showMsg();
            setInterval("check()", 2000);
            setInterval("showMsg()", 2000);  
     }
     function showMsg(){
     xmlHttp.open("POST","content");
     xmlHttp.onreadystatechange=showMsgCallback;
     xmlHttp.send(null);
     
     }
     
     function showMsgCallback(){
    // alert(xmlHttp.status+" "+xmlHttp.readyState);
     
     if(xmlHttp.readyState==4){
     if(xmlHttp.status==200){
     var text=xmlHttp.responseText;
     document.getElementById("msg").value=text;  //用textArea显示
     }
     }
     } function check(){
     alert("appli:"+"${fn:length(applicationScope.message)}");
     if(size!="${fn:length(applicationScope.message)}"){
     showMsg();
     size="${fn:length(applicationScope.message)}";
     alert(size);
     }

     }谢谢你一直以来耐心的解答^_^
    如果用以上的其实是可以的 试过打开3个 也可以工作 不过ajax每隔2s这样去取一次数据是不是到最后量大了就会有问题....
      

  3.   

    那个[del]的标签显示不正常?? 那圈起来[del]的地方是我已经删除了的
      

  4.   

    不要用setInterval,这样会导致出现并发请求,如果网络时延不好(超过2秒未返回),就会积累很多请求。建议应该是:每次 showMsgCallback() 函数调用完毕后,再用 setTimeout();  注意处理各种异常情况。另外,需要提醒的是,最好对网络超时有控制,时间太长没返回,则取消上次Ajax请求,然后重新发起。