而循环运行时的进度条(Progress bar while running while loop)

2019-07-18 06:33发布

我有这个while循环,基本上通过在数据库中的很多纪录循环,而在另一插入数据:

$q = $con1->query($users1) or die(print_r($con2->errorInfo(),1));
while($row = $q->fetch(PDO::FETCH_ASSOC)){
    $q = $con2->prepare($users2);
    $q->execute(array($row['id'], $row['username'])) or die(print_r($con2-errorInfo(),1));
}

(该脚本已缩短为方便阅读-正确的一个具有更长的数组)

我想这样做更多的图形,并展示它是如何竟然一个进度条,而不是只看到一个页面加载几分钟(有〜20.000排在这一个 - 我有表有更多的数据)

我让你可以摆脱旧的数据库的总数,而且我也可以很容易地把当前的数量成这样一个变量:

$q = $con1->query($users1) or die(print_r($con2->errorInfo(),1));
$i = 0;
while($row = $q->fetch(PDO::FETCH_ASSOC)){
    $q = $con2->prepare($users2);
    $q->execute(array($row['id'], $row['username'])) or die(print_r($con2-errorInfo(),1));
    $i++;
}

但现在我需要真正获取$i并显示它-或者类似的东西。

这是如何“容易”做了什么?

进度条的代码可以是同一文档while循环中,或在另一如果容易。

Answer 1:

你可以做一个“主”的文件,做一个AJAX这个第一文件来运行一个查询。 你可以得到所有的条目ID在这个主文件,然后将其作为参数传递到执行一个查询第二个文件。 在JavaScript阵列存储这些ID。

创建执行此功能,当第一个AJAX完成后,移动到ID阵列的第二个元素,做一套Ajax和第二个参数。 这是怎么Magento的进口量的方式来完成:)

如果您需要进一步的解释,让我知道,我尽我所能来解释,但可能尚未完全清楚。

// you generate this javascript array using php.
// let's say you have all the ids that have to be processed in $Ids php array.
Ids = [<?php echo implode(',', $Ids); ?>];

function doAjax(i) {
    $.ajax({  // using jquery for simplicity
        'url': "ajax.php?id=" + Ids[i],
    }).done(function(){
        if ( i >= 0 ) {
            // at the point you know you're at ((Ids.length-i)/(Ids.length) * 100) percent of the script
            // so you can do something like this:
            // $('.progressbar').css('width', ((Ids.length-i)/(Ids.length) * 100) + '%');
            doAjax(i-1);
        }
    });
}

doAjax(Ids.length); // starting from the last entry

所以,只是为了解释这是什么一样。 它首先宣布了将要被改变的所有ID的全局JavaScript阵列。

然后,我宣布一个递归函数的AJAX,这样我们就可以确保只有一个AJAX在任何单个时间(这样服务器不炸毁)运行,我们可以有一个相当准确的进展。 这AJAX功能执行以下操作:

  • 发送到ajax.php请求ID = XXX - ?其中xxx是JavaScript阵列中的ID中的一个。
  • 在文件中,我们得到的ID( $_GET['id']你把它从旧的数据库,并在新的插入。 这是只为一个条目。
  • 当AJAX完成,就转到done()函数。 自从我们开始doAjax()与最后一个元素的功能,我们做下一次迭代doAjax(i-1) 由于我们的数组中的倒退,我们检查,如果关键是积极的。 如果不是,该脚本将停止。

仅此而已。



Answer 2:

你不能。 在PHP首先由服务器解释,然后发送给用户的HTML代码。
唯一的可能性是建立一个HTML页面和调用PHP脚本使用AJAX。



文章来源: Progress bar while running while loop