一、背景
这是刚刚遇到的一个问题。说来也奇怪,打开浏览器的调试模式,点击ajax的提交按钮,然后console和network都毫无反应,浏览器也卡死了,网页关不掉。
如图所示,点击按钮之后,整个页面毫无反应,然后此时浏览器已经成功卡死。我听到电脑店额散热扇在疯狂的嚎叫着,电脑使用内存也在稳步增长。
然后我又试了几次,发现在刚点击按钮的时候,是可以关掉浏览器的。但是随着时间的增加,浏览器会完全卡死,知道你不得不打开任务管理器而关掉它。
二、出错原因
出错原因就在这里,隐原因是因为我在传值的时候,没有定义这个id。相当于这个id是没有经过申明的。
//在ajax上面定义一下id即可
var id = ....;
三、出错原理的猜测
1、奇怪之处
1)、首先是很奇怪的,我用的是IDE编辑器,如果出现语法错误或者说变量未定义,一般 都会报错的,但是这次没有报错。
2)、在点击按钮之后,console和network都没反应,说明此时并没有走控制器的方法
3)、浏览器会直接卡死。
2、此时我们打印一下这个没有定义的id
console.log(id);return;
结果:
也就是说,在执行ajax的时候,会默认这个id的值为节点。
3、我的猜测
由于id是未定义的,在jquery的闭包中,它可能有个处理机制,例如:
if(id == undefiend){
id = $id;
}
类似于把变量变成了它的节点信息。然后在进行ajax请求的时候,由于这个是节点信息,所以就会一直进行一些请求,造成网页卡死,内存激增的现象。
(PS:以上纯属猜想,本人不负任何责任)
四、总结
在日常的工作学习中,市场会感觉自己是真的菜。需要学习的地方很多,就像这次,虽然一步步的锁定了问题所在。但是对于出现问题的原理,却无从求证。说到底还是自己的JS水平不行。
如果有前端大神知道错误的原理,请告知,谢谢。
end