我有以下代码用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”页面何时完成加载?
答案 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();
}
})
})
}