AJAX,Javascript显示脚本运行的进度

时间:2017-06-01 11:48:19

标签: javascript php ajax

我在搜索这个问题时经历了很多其他链接。我没有得到任何特别的答案。我有PHP脚本将超过50,000个数据插入数据库。我通过ajax函数调用了脚本。我想跟踪脚本的进度并在进度条上显示它。请帮我一些代码片段。谢谢

3 个答案:

答案 0 :(得分:1)

有两种方法可以执行此操作,具体取决于AJAX请求启动的脚本首次插入之前数据库中的内容。一种方法是在某个数据库表中有一个额外的条目,每次更改一个条目时,从PHP脚本中获得完成的百分比。
这是将数据放入数据库的脚本。

$array = array(/*50,000 entries here from the ajax request*/);
$counter = 0;
foreach($array as $entry){
    // do the insertion in the database
    $percentage = $counter / count($array);
    // insert $percentage in the database in another table
}

然后,您可以向脚本发出另一个AJAX请求,该脚本返回数据库字段的值,该字段每隔(十分之一秒)存储一次计算的百分比。

如果在发出请求之前数据库为空,则必须计算在发出AJAX请求之前插入的条目数,并将其保存在JS中的变量中。
然后你可以每隔(十分之一秒)发出另一个AJAX请求,php应该只计算表中的数据库条目,将它传递给JS并且JS计算百分比。

答案 1 :(得分:0)

我不能阻止UI是使用SESSION变量跟踪数据库中的进度,或者写入数据库中的日志文件或表。会话更好,因为您不需要跟踪并发和竞争条件。

然后从浏览器每秒钟或者您决定阅读SESSION变量并更新进度条时进行AJAX调用。

当完成主要流程的原始AJAX调用完成后,您将完成进度条和/或向用户显示完整消息。

答案 2 :(得分:0)

这是显示进度的示例。 '#进度'是引导程序进度条的ID

$.ajax({
            xhr:function(){
                    var xhr = new window.XMLHttpRequest();
                    xhr.addEventListener('progress', function(e) {
                        if (e.lengthComputable) {
                            var percent = Math.round((e.loaded / e.total) * 100);
                            $('#progressBar').attr('aria-valuenow', percent).css('width', percent + "%").text(percent + "%");
                            if (percent == 100)
                            {
                                complete = 1;
                            }
                        }
                    });
                    return xhr;
                },
            type:'POST',
            url: '',
            success:function(response) {
            //success code....
            }
     });