关于定时器导致浏览器死掉的问题

yifuzhiming 2014-05-29 10:55:46
我的网页运行时间长了就会导致浏览器死掉,关键在我网页里有个定时器,这个定时器每一秒去访问一次服务器,获取一次jason数据,不知道是什么原因导致的,如果jason返回的格式有错误,会不会到导致这个问题呀,谢谢各位


var timer;
function starttimer()
{
//定时器,每隔一秒获取一次
timer = window.setInterval(getSetParam, 1000);

}


function getSetParam()
{
$.ajax({
type:"POST",
url : getparam_url,
async: false,
data: "{tag:ptn}",
datatype:"json",
success:function(rst){
//alert(rst);
var json = eval('('+rst+')');
var userpassword = json.userpassword;
var admpassword = json.admpassword




},error:function(){
//alert('failure!');
//window.location.href="login.html";
window.location.href="/";
}
});

}

...全文
1050 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dreamhai 2016-11-08
  • 打赏
  • 举报
回复
据我所知 , 是内存泄露 , 我也出现这样的问题 , 我的是5秒请求一次 , 而且请求的数据也比较多 ,大概半个小时左右,会出现网页崩溃问题 , 而且 , 打开任务管理器可以发现 , 打开网页的时候 , cpu 消耗比较严重 , 当关掉的时候 , 就只有10%以下 , 这是我的情况 , 我暂时还在解决这问题 .
scscms太阳光 2014-05-30
  • 打赏
  • 举报
回复
你是不管有没有返回成功就定时发送请求,当然会被卡到死。试着等返回成功后起算1秒后再请求
<script type="text/javascript">
    /*var timer;
    function starttimer()
    {
        //定时器,每隔一秒获取一次
        timer = window.setInterval(getSetParam, 1000);

    }*/
    function getSetParam()
    {
        $.ajax({
            type:"POST",
            url : getparam_url,
            async: false,
            data: "{tag:ptn}",
            datatype:"json",
            success:function(rst){
                setTimeout(getSetParam,1000);//成功后才发第二次,否则即没意义又卡死
                var json = eval('('+rst+')');
                var userpassword = json.userpassword;
                var admpassword = json.admpassword
            },error:function(){
                window.location.href="/";
            }
        });

    }
    getSetParam();
</script>
csdnfan 2014-05-30
  • 打赏
  • 举报
回复
那你可以用个变量把句柄保存起来啊,既然知道原因了。每次执行就调用 这个变量就可以了。 网上很多类似码: var ajax = {GetDate:funcion(){$.ajax{……}}} 这个早已经被人家归类过技巧了。
yifuzhiming 2014-05-30
  • 打赏
  • 举报
回复
引用 3 楼 lynnlovemin 的回复:
为什么要用定时器?你不觉得这样对服务器造成的压力很大么?
因为服务器比较特殊,不用讨论这个
yifuzhiming 2014-05-29
  • 打赏
  • 举报
回复
我发现我的ajax调用,导致句柄数不断增加,每次增加2个,如果把ajax调用去掉就没事了,可能问题出在这里了
  • 打赏
  • 举报
回复
1.你需要增加一个控制(开关),即当获取数据的时候,关闭开关,获取数据的过程中,无需再去发送请求,当获取到全部数据后,打开开关,定时器还可以继续请求服务器 按照你的处理逻辑,每隔一秒都会请求数据,而不管上次是否还在进行,http请求没有达到最优 2.eval可能存在性能问题,你可以转换json 利用JSON.parse(rst);
lynnlovemin 2014-05-29
  • 打赏
  • 举报
回复
为什么要用定时器?你不觉得这样对服务器造成的压力很大么?

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧