Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用setInterval测试某个条件,当发现时,清除interval…有其他选择吗?_Javascript_Jquery - Fatal编程技术网

Javascript 使用setInterval测试某个条件,当发现时,清除interval…有其他选择吗?

Javascript 使用setInterval测试某个条件,当发现时,清除interval…有其他选择吗?,javascript,jquery,Javascript,Jquery,我需要的是javascript不断检查条件(类似于while循环)。我通过设置间隔来实现这一点,如果满足条件,我清除间隔,然后退出,或者如果它运行了X次,在下面的情况下,我将其设置为100 我不太喜欢这个,我把它放在一起是因为它有效。我正在检查来自服务器的数据,这是缓慢的。我之所以想要一个替代方案,主要是因为我有一个在AJAX调用启动时运行的加载gif,我会将此代码粘贴在底部以显示。它运行缓慢,所以我相信当javascript处于时间间隔时,它无法渲染gif,所以运动图像就停止了 有人知道做我想

我需要的是javascript不断检查条件(类似于while循环)。我通过设置间隔来实现这一点,如果满足条件,我清除间隔,然后退出,或者如果它运行了X次,在下面的情况下,我将其设置为100

我不太喜欢这个,我把它放在一起是因为它有效。我正在检查来自服务器的数据,这是缓慢的。我之所以想要一个替代方案,主要是因为我有一个在AJAX调用启动时运行的加载gif,我会将此代码粘贴在底部以显示。它运行缓慢,所以我相信当javascript处于时间间隔时,它无法渲染gif,所以运动图像就停止了

有人知道做我想做的事的替代方法吗? 我希望这有意义

function checkCondition(name,action){
    var timesRun = 0;
    var success = false;

        var interval = setInterval(function() {
            timesRun++;
            var container = {};
            container = mapSystem["desktop"];

            if(action === "delete"){
                var isExisting = name in container ;
                if ( !isExisting || (timesRun === 100)) {
                    //break out of this interval
                    clearInterval(interval);
                    renderCheckList();
                    success = true;
                } else {
                    // Update mapNodeData with fresh data
                    updateData('desktop', false); // Just updates data
                }
            }
        }, 2000);
}

// Code that I have to render a loading GIF. Works great but seems 
// to stop during the interval
$('#loading').hide().ajaxStart(function() {
                $(this).show();
             }).ajaxStop(function() {
                $(this).hide();
            });
如果使用而不是ajaxStart,则可以设置一个函数,以便在操作完成时执行:

从文档中:

完整的

类型:函数(jqXHR jqXHR,字符串textStatus)

函数 在请求完成时调用(在成功和错误之后 执行回调)。函数被传递两个参数: jqXHR(在jquery1.4.x中,XMLHTTPRequest)对象和字符串 对请求的状态进行分类(“成功”、“未修改”, “错误”、“超时”、“中止”或“解析器错误”)。从jQuery1.5开始 完整设置可以接受一系列函数。每个功能将 轮流叫。这是一个Ajax事件


您还可以使用success和error属性为success或failure指定不同的函数。

AJAX有一个success回调,您应该能够通过将代码连接到其中而不是通过轮询来确定服务何时完成。AJAX中的A=asynchronous。请观看此链接。这对你来说可能很有趣(如果我理解正确的话)。。为清楚起见,在updateData调用中,我正在运行一个ajax调用,以从服务器检索更新的数据。在成功回调中,我已经有了一些非常有效的东西。这个函数实际上是在主操作的success函数中调用的(例如,当我在javascript树中删除一个计算机节点时,这个函数会检查以确保在刷新之前将其删除)。我正在对后端进行的API调用需要处理,因此在javascript调用完成时可能无法完成,这就是我希望手动检查的原因。对,我收到一个响应,但它只是一个作业响应。cloudstack软件正在后台处理该操作。无论如何,这并不需要很长时间,但有时我注意到javascript会在它发生之前执行。例如,如果我删除某个内容,有时它需要“停止”然后删除,因此会发生多个事件。我尽量不解释太多的后端,因为它在这里不太重要(至少我不认为)。加载映像与主代码是分开的。我的html页面中有加载图像ajaxStart/ajaxStop。在html页面的javascript文件中还有其他代码,我认为设置全局ajaxStart和stop来进行加载比将其添加到每个ajax调用中要容易得多,这取决于用户的选择。我的主要问题是找到setInterval的替代方案。那么,在对服务器的其他调用中,我们将使用回调。你不应该反复检查,看看什么时候事情发生了变化。您只需检查呼叫何时返回,然后根据状态进行操作。显然,您没有向我们展示您的相关服务器呼叫,因此很难说得更多。