Javascript 在上一个请求挂起时持续发送和接收AJAX响应
我正在Node.js框架中运行一个Python脚本,需要30秒才能完成。在等待脚本完成时,我想在页面上显示进度。脚本生成7个文件,所以我想显示目录中的文件数 首先,我向将运行Python脚本的页面发送一个AJAX请求:Javascript 在上一个请求挂起时持续发送和接收AJAX响应,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在Node.js框架中运行一个Python脚本,需要30秒才能完成。在等待脚本完成时,我想在页面上显示进度。脚本生成7个文件,所以我想显示目录中的文件数 首先,我向将运行Python脚本的页面发送一个AJAX请求: var isFinished = false; $.ajax({ url: "/process/xlsx/" + uuid, type: "GET", success: function (data) { if (data.status =
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请求完成的情况下运行下一行,因此我将发送另一个请求,其响应将是目录中的文件数。下面的代码正常工作没有任何问题(当我不发送第一个请求时)
我知道我做错了什么,因为我对AJAX知之甚少。还有什么方法可以解决这个问题吗?我设法用时间间隔解决了这个问题
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);
while
循环的目的是什么?您可以发布执行python进程的代码吗?同时,您也遇到了问题,您必须使用interval。。它会更好。@guest271314,我想它是在不断地检查进度。是的,但它会发送很多请求,我认为200毫秒的间隔是可以的。我没有得到什么,错误在哪里。
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);