我在Node.js框架中运行Python脚本,需要30秒才能完成。在等待脚本完成时,我想在页面上显示进度。脚本生成7个文件,因此我想显示目录中的文件数。
首先,我发送一个AJAX请求到将运行Python脚本的页面:
var isFinished = false;
$.ajax({
url: "/process/xlsx/" + uuid,
type: "GET",
success: function (data) {
if (data.status == "success") {
$("#infoText").text("finished");
isFinished = true;
} else {
$("#infoText").text("failed");
}
}
});
由于AJAX是异步的,浏览器将运行下一行而不等待第一个AJAX请求完成,我发送另一个请求,其响应将是目录中的文件数。下面的代码通常没有任何问题(当我不发送第一个请求时)。
while (!isFinished) {
$.ajax({
url: "/process/" + uuid + "/phase",
type: "GET",
timeout: 1000,
success: function (data) {
if (data.status == "success") {
var numberOfFiles = data.numberOfFiles;
$("#infoNumber").text(numberOfFiles);
}
}
});
}
我知道我做错了,因为我对AJAX了解不多。反正有没有解决这个问题?
答案 0 :(得分:0)
我设法使用间隔。
var isFinished = false;
// run python script
$.ajax({
url: "/process/xlsx/" + uuid,
type: "GET",
success: function (data) {
if (data.status == "success") {
$("#numbersNum").text("finished");
isFinished = true;
} else {
$("#numbersNum").text("failed");
}
}
});
var checkDirectory = function () {
if (isFinished) {
clearInterval(checkDirectoryInterval);
return;
}
$.ajax({
url: "/process/" + uuid + "/phase",
type: "GET",
success: function (data) {
if (data.status == "success") {
var numbersNum = data.numberOfFiles;
$("#numbersNum").text(numbersNum);
}
}
});
};
var interval = 2000;
var checkDirectoryInterval = setInterval(checkDirectory, interval);