首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个js如果子句不停止循环?

为什么这个js如果子句不停止循环?
EN

Stack Overflow用户
提问于 2011-09-08 09:39:51
回答 2查看 92关注 0票数 0

下面应该每10秒检查一个页面的数据(一个简单的整数)。当整数存在时(data != null),然后警告并停止间隔。

但是每10秒就会排队提醒一次。当脚本最终找到它正在寻找的整数时,会弹出大量的警报.每十秒钟一次。如果脚本持续50秒,那么在加载页面后50秒内,您将立即得到5个警报。

有什么问题吗?if (data != null) {不应该阻止警报触发吗.直到有数据为止?我不知所措。另外,“数据”从未出现在警报中。

代码语言:javascript
运行
复制
var pinger;
$(document).ready(function() {
    var pinger = setInterval(function(){
        $.get("/ajax.php", function(data) {
            if (data != null) {     /** Shouldn't this line stop loops? **/
                alert("alert" + data);
                clearInterval(pinger);
            }
        });
    }, 10000);
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-08 09:43:18

/ajax.php比setInterval()调用函数所需的时间更长。因此,当它结束时,setInterval()实际上已经多次调用该函数。

使用setTimeout()而不是setInterval():

代码语言:javascript
运行
复制
$(document).ready(function() {
    setTimeout(function self(){
        $.get("/ajax.php", function(data) {
            if (data != null) {
                alert("alert" + data);
            } else {
                setTimeout(self, 10000);
            }
        });
    }, 10000);
});
票数 1
EN

Stack Overflow用户

发布于 2011-09-08 09:45:54

我敢打赌,您不会从$.get获得null (即使有一个空字符串,然后将它与null进行比较-- '' != null返回true)。所以警报才会弹出。

另外,一些人提出了一个很好的观点,即如果ajax调用花费超过10秒的时间,它将再次触发,即使以前的ajax可能返回正确的数据,这些数据应该会停止循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7346014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档