Php 使用jQuery和Ajax同时执行2个后台任务

Php 使用jQuery和Ajax同时执行2个后台任务,php,jquery,ajax,process,background-process,Php,Jquery,Ajax,Process,Background Process,更新我的问题如下 我制作了一个脚本,用户可以在其中导入大量数据。提交表单并验证数据后,我添加了2个后台任务:1是一个导入所有数据的脚本。这个脚本还让数据库知道他总共做了多少以及他做了多少。第二个是一个脚本,它读取数据库中完成了多少工作,并将其显示在一个漂亮的进度条中 代码: 两个脚本都很好。除了获取进程状态的第二个脚本在第一次导入数据完成后没有启动之外。这使得整个事情有点没用 有什么办法解决这个问题吗 更新: 我发现后台进程只被调用一次。这就是问题所在。我只是不知道该怎么修 var checkP

更新我的问题如下

我制作了一个脚本,用户可以在其中导入大量数据。提交表单并验证数据后,我添加了2个后台任务:1是一个导入所有数据的脚本。这个脚本还让数据库知道他总共做了多少以及他做了多少。第二个是一个脚本,它读取数据库中完成了多少工作,并将其显示在一个漂亮的进度条中

代码:

两个脚本都很好。除了获取进程状态的第二个脚本在第一次导入数据完成后没有启动之外。这使得整个事情有点没用

有什么办法解决这个问题吗

更新: 我发现后台进程只被调用一次。这就是问题所在。我只是不知道该怎么修

var checkPercentage = function() {
    alert("Is this function getting called every second?");
    $.ajax({
        type: "GET",
        async: true,
        url: "required/get-process-status.php",
        data: "importcode=123456",
        success: function(data) {
            alert(data);
        }
    });
    setTimeout(checkPercentage, 1000);
}
上面的代码提醒:此函数是否每秒调用一次?每一秒。应该这样。但是,值“data”只调用一次。那不是我所期望的。。有什么想法吗?

你是说像这样吗

$.ajax({
    type: "GET",
    url: "import-process.php",
    success: function(data) {
        checkPercentage();
    }
});

var process = 0;
var checkPercentage = function() {
    $.ajax({
        type: "GET",
        url: "get-process-status.php",
        data: "importcode=123456",
        success: function(data) {
            if (!data.indexOf("ERROR") !== -1) {
                process = data;
                $("#process_balk").css('width', process + '%');
            }
        }
    });

    if (process != 100) {
        setTimeout(checkPercentage, 1000);
    } else {
        window.location.href = "import-finished.php";
    }
}

我刚刚将checkpercange函数调用从脚本末尾移到了第一个ajax的success函数。如果您希望在出现错误的情况下运行它,也可以将其移动到complete函数。

将回调函数设置为:

success: function(data) {
        if (!data.indexOf("ERROR") !== -1) {
            process = data;
            $("#process_balk").css('width', process + '%');
            if (process != 100) {
               setInterval(checkPercentage, 1000);
            } else {
               window.location.href = "import-finished.php";
            }
        }
    }
首先,if语句必须位于回调函数中,才能按您希望的方式工作。其次,您应该使用setInterval而不是setTimeout,因为它会在每次间隔时间重新检查它

此外,yabol说得对,您的代码顶部应该如下所示:

$.ajax({
type: "GET",
url: "import-process.php",
success: function(data) {
    checkPercentage();
}
});
$.ajax({
type: "GET",
url: "import-process.php",
success: function(data) {
    checkPercentage();
}
});