0

我需要的是让 javascript 继续检查条件(类似于 while 循环)。我通过执行 setInterval 来执行此操作,如果满足条件,我会清除然后退出的间隔,或者如果它已经运行 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();
            });
4

1 回答 1

1

如果您使用.ajax()而不是 ajaxStart,您可以设置一个函数在操作完成时执行:

从文档:

完全的

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

请求完成时要调用的函数(在执行成功和错误回调之后)。该函数获得两个参数:jqXHR(在 jQuery 1.4.x 中,XMLHTTPRequest)对象和一个对请求状态进行分类的字符串(“成功”、“未修改”、“错误”、“超时”、“中止”或“解析器错误”)。从 jQuery 1.5 开始,完整的设置可以接受一个函数数组。每个函数都会被依次调用。这是一个 Ajax 事件。

您还可以使用成功和错误属性为成功或失败指定不同的函数。

于 2013-03-04T21:07:43.963 回答