完成JSON .each时的Jquery Trigger事件

时间:2011-07-02 13:32:32

标签: javascript jquery asp.net ajax

我有以下代码用Jquery和asp.net ping一个计算机列表。

function ping() {
    $('#progress').css("display", "");
    $('.comp').each(function () {
        var $computer = $(this);            
        $.getJSON('pingcomputer.aspx', { computer: $(this).attr("rel") }, function (data) {
            if (data.Status == '1') {
                $($computer).attr("src", "ok.png");
            }
            else {
                $($computer).attr("src", "nok.png");
            }
        })
    })
    $('#progress').css("display", "none");
}

ping操作正常。 在ping开始之前我想让#progress可见(图像) 在所有计算机都被ping之后我想再次隐藏它。

问题是在调用函数时会立即隐藏#progress图像。 如何检测所有“pingcomputer.aspx”页面何时完成加载?

2 个答案:

答案 0 :(得分:1)

添加一个计数器,用于检查已启动的请求是否已完成:

function ping() {
    $('#progress').css("display", "");
    var count = 0,
        total = $(".comp").length;
    $('.comp').each(function () {
        var $computer = $(this);     

        $.getJSON('pingcomputer.aspx', { computer: $(this).attr("rel") }, function (data) {
            count++;     
            if (data.Status == '1') {
                $($computer).attr("src", "ok.png");
            }
            else {
                $($computer).attr("src", "nok.png");
            }
            if (count==total) $('#progress').css("display", "none");
        })
    })

}

答案 1 :(得分:1)

计算应该发生的事情的数量,每次做一件事就减少计数。如果没有,请停止进度条。顺便说一下,你没有使用show()/ hide()的任何原因?

function ping() {
    $('#progress').show();
    var $comp = $('.comp'),
        waitCount = $(comp).length;
    $comp.each(function () {
        var $computer = $(this);            
        $.getJSON('pingcomputer.aspx', { computer: $(this).attr("rel") }, function (data) {
            if (data.Status == '1') {
                $($computer).attr("src", "ok.png");
            }
            else {
                $($computer).attr("src", "nok.png");
            }
            if (--waitCount == 0) {
               $('#progress').hide();
            }
        })
    })
}