小编典典

在PHP中使用jQuery / Ajax显示当前进度

ajax

简短而有趣: 寻找一种方法来调用PHP文件并使用jQuery和/或Ajax显示进度。调用PHP文件upgrade.php?step =
1,然后将返回的输出附加到#upgradestatus。完成之后,将调用upgrade.php?step = 2并附加输出,直到完成指定数量的步骤。

说明:
我正在尝试为在PHP中运行的软件创建一个插件。该插件将调用PHP文件中的每个步骤以升级每个文件,等等。我希望能够在页面上显示进度,而无需重新加载它以向用户显示已完成的操作以及处理的位置。

使用我的PHP思想过程,我想创建类似以下内容的东西:

for (var s=0; s<2; s++){
    $('#upgraderesult').load('upgrade.php', 'step=' + s, function() {
        $('#upgradestatus').append('Upgrade Step ' + s + ' Completed');
    });
}

我也尝试使用.ajax(),并且通过这两种方法,我很快了解到,作为异步对象,要弄清楚这一点会有些棘手。

我的想法是创建一个FOR循环,该循环将循环执行所有步骤。然后,该for循环将生成必要的jQuery / Ajax代码,该代码将与状态消息一起追加到现有div

upgradestatus上。我希望它附加加载在#upgraderesult中的结果,但为简单起见,我仅添加了“ Upgrade Step X

Complete”。

因此,现在我陷入了困境,并认为我可能只需要使用PHP即可生成正确的jQuery /
Ajax代码,但我想检查一下是否有人对如何以其他方式完成此操作有任何意见或建议,甚至我在想这个完全错误。

我所希望的是能够根据该过程的步骤来调用PHP文件,然后在浏览器中向用户显示进度…事实证明这比我想象的要困难得多。

感谢您的任何意见或建议/建议,我非常感谢!


阅读 288

收藏
2020-07-26

共1个答案

小编典典

每个人都感谢您的输入,在Freenode #jQuery中一些人的帮助下,我们提出了一个效果很好的解决方案:

var numSteps = 2;
function loadStepAjax(s) {
    $.ajax('upgrade.php', {
        type: 'GET',
        dataType: 'html',
        data: {
           step: s
        },
        success: function(data) {
            $('#upgradestatus').append(data);
            if (s < numSteps)
                loadStepAjax(s+1);
            }
     });
}

然后调用该函数:

loadStepAjax(1);

我们创建了一个函数loadStepAjax,而不是使用FOR循环,然后在回调中使用了IF语句来确定是否再次调用该函数。

总是很简单,不是吗!谢谢大家的投入,对此深表感谢。

2020-07-26