日期:2014-05-18  浏览次数:20766 次

困扰了几天的setInterval用了之后程序就报错,望高手来救命。。。
function   sendRequest()   {   //开始接收
        createXMLHttpRequest();
        var   url   =   " <%=request.getContextPath()%> /track.do?method=init ";
                            XMLHttpReq.open( "GET ",   url,   true);
                            XMLHttpReq.onreadystatechange   =   processResponse   ;
                            XMLHttpReq.send(null);     //   发送请求
              }


function   processResponse()   {
if(XMLHttpReq.readyState   ==   4){
    if(XMLHttpReq.status   ==   200){
  showPage();
setInterval( 'sendRequest(); ',   5000);
 
      }else{
  document.getElementById( "result ").innerHTML   =   "服务器连接失败...... ";  
            }        
}
}

页面上一开始接收按钮,onclick方法是触发sendRequest函数
过了5秒之后,在次触发 'sendRequest函数,这个时候,console就有错误
Caused   by:   java.lang.OutOfMemoryError:   Java   heap   space

但是当我换了一个方法,不ajax而是用
<meta       http-equiv= "refresh "     content= "5 "   url= "track.do?method=init "   />  
这样来刷新init方法,console就会输出正常的信息,请问这是什么原因
望高手解答。。。。

------解决方案--------------------
js中SetInterval与setTimeout用法

JS里设定延时:

使用SetInterval和设定延时函数setTimeout 很类似。setTimeout 运用在延迟一段时间,再进行某项操作。

setTimeout( "function ",time) 设置一个超时对象
setInterval( "function ",time) 设置一个超时对象

SetInterval为自动重复,setTimeout不会重复。


clearTimeout(对象) 清除已设置的setTimeout对象
clearInterval(对象) 清除已设置的setInterval对象


------解决方案--------------------
setInterval 换成 setTimeout

你这两个函数递归调用
setInterval只开不关 那就OutOfMemory啦
------解决方案--------------------
我认为,是ajax对象请求的问题,应该这样写:

function sendRequest() { //开始接收
var req = createXMLHttpRequest();
var url = " <%=request.getContextPath()%> /track.do?method=init ";
var handlerFunction = processResponse(req, sendRequestCallBackFunction);
req.onreadystatechange = handlerFunction;
req.open( "POST ", url, true);
req.setRequestHeader( "Content-Type ", "application/x-www-form-urlencoded; charset=UTF-8 ");
XMLHttpReq.send(null); // 发送请求
}

function processResponse(req, responseXmlHandler) {
if (XMLHttpReq.readyState == 4) {
if (XMLHttpReq.status == 200) {
showPage();
setInterval( 'sendRequest(); ', 5000);
} else {
document.getElementById( "result ").innerHTML = "服务器连接失败...... ";
}
}
}
------解决方案--------------------
setInterval( 'sendRequest(); ', 5000);
放函数外面
------解决方案--------------------<