困扰了几天的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);
放函数外面
------解决方案--------------------<