在先前的请求未决时,继续发送和接收AJAX响应

时间:2017-01-01 23:47:26

标签: javascript jquery ajax

我在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了解不多。反正有没有解决这个问题?

1 个答案:

答案 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);