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