JS自身循环到2300多次时,卡住了

bubsy 2013-09-02 05:52:47
JS自身循环到2300多次时,卡住了,查资料说可能是内存泄露,我不知如何解决,请教大神

$("#intodb_button").click(function(){
$(this).attr({"disabled":"disabled"});
loopin();
});

function loopin(){
var hisdbid=$("#hisdbid").text();
var nextid=$("#nextid").text();
var maxid=$("#maxid").text();
$.get("index.asp",{act:"intodb",hisdbid:hisdbid,nextid:nextid,maxid:maxid},function(data,status){
if(status=="success"){
// alert(data);
var strd = data.split("\|\|\|");
$("#disp").prepend("<li>"+data+"</li>");
if(Number(strd[0])==Number(maxid)){
$.get("index.asp",{act:"finish_indb",hisdbid:hisdbid},function(data,status){
if(status=="success"){
$("#main_page").css({"display":"block"});
alert("回写标志成功,导入数据库作业结束")
}
})
}else{
$("#nextid").html(Number(strd[0])+1);
loopin();//再次执行loopin()
}
}
})
};
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hch126163 2013-09-03
  • 打赏
  • 举报
回复
loopin();//再次执行loopin() 用: setTimeout(loopin,0);
hch126163 2013-09-03
  • 打赏
  • 举报
回复
$.get("index.asp" 2个请求完全可以合并成一个请求。 act:"intodb" 成功后,服务器直接执行 "finish_indb" 再返回。 不用2个请求。 $("#hisdbid") 页面加载时,获取dom 对象。不用每次都去获取
bubsy 2013-09-03
  • 打赏
  • 举报
回复
昨晚上调试到了3点钟终于搞明白了! 应该不是什么泄露的问题。 循环2300次的时候,等于prepend2300个<li>,IE浏览器不死才怪呢。 于是我增加了.remove();//只显示10条 只显示最近的10条,结果,IE不再卡死,问题解决。
$("#intodb_button").click(function(){
	$(this).attr({"disabled":"disabled"});
	loop1();
});

function loop1(){
	var hisdbid=$("#hisdbid").text();
	var nextid=$("#nextid").text();
	var maxid=$("#maxid").text();
		var removeli=Number(nextid-11);
		$("#"+removeli).remove();//只显示10条	
	if (Number(maxid)==Number(nextid)){
		$.get("index.asp",{act:"finish_indb",hisdbid:hisdbid},function(data,status){
			if (status=="success"){
				$("#main_page").css({"display":"block"});
				alert("回写标志成功,导入数据库作业结束");
			}
		})
	}else{

		$.get("index.asp",{act:"intodb",hisdbid:hisdbid,nextid:nextid,maxid:maxid},function(data,status){
			if (status=="success"){
				$("#disp").prepend("<li id='"+nextid+"'>"+data+"</li>");//回显Data
				$("#nextid").html(Number(nextid)+1);//下一条记录
				loop1();//再次执行loop()
			}
		});
		
	}
};
似梦飞花 2013-09-02
  • 打赏
  • 举报
回复
把for循环写成window.setInterval形式试试
  • 打赏
  • 举报
回复
这么大的数据量,在ie中肯定会卡的要死,google浏览器可以很流畅

87,910

社区成员

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

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