【发布时间】:2012-02-13 05:27:19
【问题描述】:
我的问题是带有 jQuery 进度条 (dnc_scrubber.html) 的 <div> 直到所有其他请求都完成后才加载。
这有什么问题吗?我想将#tabs-1 的内容更改为进度条,并在dnc_scrubber.php 工作时对其进行动画处理。
lines.php 和 progress.php 文件用于计算 dnc_scrubber.php 完成的工作的百分比 - 它会在会话进行时更新会话。 lines.php 和 files.php 返回会话变量。
$('#tabs-1').load('dnc_scrubber.html', function() {
var querystring = 'col=' + col + '&' + makeQS(files);
var lines = 0;
$('#progressbar').progressbar();
$.ajax({
url: 'dnc_scrubber.php',
type: 'POST',
async: true,
data: querystring,
complete: function() {
for (i = 0; i < files.length; i++) {
$('#complete').append('<a href="process/MATCHED - ' + files[i] + '">MATCHED - ' + files[i] + '</a><br />');
$('#complete').append('<a href="process/SCRUBBED - ' + files[i] + '">SCRUBBED - ' + files[i] + '</a><br />');
}
}
});
$.ajax({
url: 'lines.php',
async: true,
dataType: 'json',
complete: function(json) {
lines = json.total;
}
});
function setProgress() {
if (prog < lines) {
prog = getProgress();
$('#progressbar').progressbar('option', 'value', prog);
setTimeout(setProgress(), 1000)
} else {
$('#progressbar').progressbar('option', 'value', 100);
}
}
var prog = getProgress();
setTimeout(setProgress(), 1000);
});
我已经尝试在.ajax() 请求的回调函数中加载进度条,其中async 设置为false。同样的结果也会发生 - 直到dnc_scrubber.php 完成,进度条才会加载到#tabs-1。
我能做什么?
【问题讨论】:
-
你知道什么是同步请求和异步请求吗?
-
你试过用success:代替complete吗?我认为这将在他们处理时处理每个,而不是等待所有的。
-
@MarkSchultheiss 刚试了,没变化
-
@MarkSchultheiss
success发生在complete之前,它们的行为应该相同。 -
查看我的答案了解一些细节,但底线是
setTimeout(setProgress(), 1000)语法不正确。