jquery的轮询使用ajax导致内存溢出问题

因为我的页面是要达到实时同步的效果,我用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占用的内存一直在涨,总量一直涨,但是括号内的实际大小并没有多大的变化.

追答

这我就要看过你的代码才知道了,否则我怎么知道你究竟是怎么用的呢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-01
试试这个,我在用Jquery的时候都加一个这个,清除缓存。 $.ajaxSetup ({ cache: false //关闭AJAX相应的缓存 });