因为我的页面是要达到实时同步的效果,我用setInterval每5s进行一次ajax异步查询,目前的状况是效果可以做到,但是我的页面的内存一直在涨,如果放在那一天不管他就会崩溃,期间只要有一次同步刷新页面,内存就会清空重置.我现在主要的怀疑就是,如果我5s后台不能进行一次返回,那么就会导致我的定时器提交执行队列任务堆积,越堆越多导致我浏览器崩溃,还有一种可能就是我定时器中有创建对象或者事件,可能二次请求的时候上一次的没有清空.我现在也不知道是怎么回事了,求各位大佬支支招,该怎么办.网上搜到了abort()方法,但是好像并没有用.
你这种情况就不应该用轮询,而应该在ajax的回调函数(最好是complete)中再次发起下一次请求,这样就可以保证每次请求都是在上一次请求结束后才发起的,这样就不会造成崩溃了。比如:
function xxx(){
$.ajax({
url:"......",
data:{......},
success:function(data){
//处理返回数据
},
error:function(){
//处理错误
},
complete:function(){ //不管成功与失败,都会发生complete回调
setTimeout(xxx,5000); //5秒后再次发起ajax请求
//也可以直接用 xxx(); 可以做到完全实时,但会牺牲一些性能
}
});
}
特别注意,xxx函数在外部调用时,不能再用 setInterval,而应该是xxx()直接调用!
追问采用你的方法之后,感觉有所好转,增长变慢了,但是还是在不停的涨,用谷歌浏览器的任务管理器看,JavaScript占用的内存一直在涨,总量一直涨,但是括号内的实际大小并没有多大的变化.
追答这我就要看过你的代码才知道了,否则我怎么知道你究竟是怎么用的呢