JS 越跑越卡 一会儿就卡死了

2015-11-13 16:43:24 +08:00
 m939594960
function  goto()
    {
        var _this=$('.urls span.url').eq(0);
        var b = new Base64();
        $('#cai_web').attr('src',"/cai_content/"+b.encode (_this.html())+'-'+_this.attr('data-gid')+'-'+'{{ $id }}');
        $('#cai_web').load(function()
        {
            _this.appendTo('.urls .item .ok');
            if (go==true){
                goto();
            }
        });
    }

做采集的时候 需要用到的 JS 但是发现这个段 JS 越跑越卡 一会儿就卡死了
哪个地方有问题? 该如何解决呢?

3272 次点击
所在节点    问与答
28 条回复
HunterPan
2015-11-13 19:16:06 +08:00
@otakustay 要看的 callback 怎么处理的才能决定是否递归吧
aivier
2015-11-13 19:45:00 +08:00
$(...).load() 不是用来加载数据的么,例如

$("username").load("/getUserName.php")
dphdjy
2015-11-13 19:55:22 +08:00
iframe 有父对象~如果可以交互在子 document 建立玩在反馈~~感觉省好多事~~
m939594960
2015-11-13 20:15:33 +08:00
@kokdemo
@sunjourney
@ 、 bdbai
@LancerComet
@HunterPan
@dphdjy
找到问题了。 其实并不是递归的问题。 是个非常蛋疼的问题 。。
我每次循环的时候都给 iframe 加上了一个监视 load 的事件
然后 goto 就无限的运行了。。 现在在前面加个$('#cai_web').unbind('load'); 然后再进行监视就 ihaole
aivier
2015-11-13 20:18:06 +08:00
孤陋寡闻了...从未在循环里设定过事件绑定,用手机写的代码测试出来了刚想回复发现正好你也发现问题了...
m939594960
2015-11-13 20:18:40 +08:00
@LancerComet 嗯 谢谢你 以后不用递归了 用这种 settimeout 应该效果更好
@aivier 我查了一下
http://www.w3school.com.cn/jquery/ajax_load.asp
http://www.w3school.com.cn/jquery/event_load.asp
应该是一个方法两个用途
@dphdjy 嗯这样也不错
otakustay
2015-11-13 21:57:44 +08:00
@HunterPan 那个是 jQuery 的 load 嘛,是个异步的,不会记在同一个 call stack 上面的,除非楼主坑我们$不是 jQuery
aivier
2015-11-13 22:36:59 +08:00
看了下官方文档,自动判断传入参数的,我感觉还是现在这种方式更好一些,如果准备一个一个来的话,这种 callback 方式就相当于多线程的了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/235991

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX