我想设置一个进度条,显示导入大型 CSV 文件并传递到数据库的长时间工作任务的进度。我通过初始 jQuery.ajax 调用开始导入过程,并设置超时以从这些文件中获取已处理的行的百分比。
问题是当我启动初始 ajax 调用时,所有其他 ajax 调用只是等待执行,直到初始调用完成。
所以这是我的代码:
var progress = false;
var update_progress = function() {
if(progress) {
$.ajax({
url: 'index.php?do=update_progress'
},
function(json) {
// Something < 100
if(json.perc !== undefined) {
$('#progress').css('width', json.perc + '%');
}
setTimeout(update_progress, 1000);
});
}
}
var start_import = function(i) {
// Setting progress allowed
progress = true;
// start the update in 1s
setTimeout(update_progress, 1000);
// start the database-import (20-30 seconds runtime on server)
$.ajax({
url: 'index.php?do=start_import'
},
function(json) {
// Import finished, disallow progressing
progress = false;
// Finally always complete: json.perc is 100
if(json.perc !== undefined) {
$('#progress').css('width', json.perc + '%');
}
});
};
start_import();
这有点令人困惑,因为我认为每个调用都可以异步工作。怎么了?
问候蒂姆