我想为服务器端任务创建进度条(用php编写)
出于学习目的,示例和任务将非常简单。我将在客户端页面上有一个文本字段,读取a
number
,将其与ajax一起传递给php脚本,并使其计算所有数字的总和from 0 to number
(简单的任务是花费大量时间,只是为了模拟一些服务器端工作)
在.html文件中,我将创建一个计时器,该计时器每秒钟会调用一次函数,以n
获取for循环所需的索引并更新进度条。
我的问题是:
是否可能在同一个php文件中有两个函数,以及如何使用ajax调用特定函数:一个会阻塞循环,number
而另一个我会调用以获取for循环得到的当前索引至。
我到目前为止的代码:
<!DOCTYPE html>
<html>
<head>
<script>
function myTimer()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("percentageDiv").innerHTML=xmlhttp.response;
alert(xmlhttp.response);
}
}
xmlhttp.open("GET","getter.php",true);
xmlhttp.send();
}
function loop(){
var loop_index = document.getElementById("loop_nr").value;
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("sumDiv").innerHTML="Total sum = " + xmlhttp.response;
clearInterval(myVar);
}
}
xmlhttp.open("GET","server_side.php?nr="+loop_index,true);
xmlhttp.send();
var myVar=setInterval(function(){myTimer()},1000);
}
</script>
</head>
<body>
<div id="percentageDiv"> Percentage div</div>
<div id="sumDiv"></div>
<input type="text" id="loop_nr">
<input type="submit" onclick="loop()">
</body>
</html>
server_side.php
<?php
session_start();
$index=$_GET["nr"];
$progress = 0 ;
$sum = 0 ;
for ($i = 1; $i <= $index; $i++) {
$sum = $sum + $i;
$progress++;
$_SESSION['progress'] = $progress;
}
echo $sum;
?>
getter.php
<?php
session_start();
$progress = $_SESSION['progress'];
echo $progress;
?>
谢谢!
您的问题将是两个:
您的AJAX代码很好。您在PHP中唯一要做的就是接收此调用。
看看你的要求。您nr
随请求发送一个变量:
server_side.php?nr="+loop_index
这将帮助我们在php代码中确定这是进行求和操作的AJAX调用。现在在PHP中:
<?php session_start();
//We look at the GET php variable to see if the "nr" is coming
if(isset($_GET['nr'])) {
//Its coming!. Now we procede to call our function to sum
$result = sum($_GET['nr']);
}
function sum($nr) {
$progress = 0 ;
$sum = 0 ;
for ($i = 1; $i <= $nr; $i++) {
$sum = $sum + $i;
$progress++;
$_SESSION['progress'] = $progress;
}
echo $sum;
}
而已。
我们需要进行其他AJAX调用以请求PHP的进度。
首先,我们进行另一个AJAX调用,以使用计时器检索进度!
var timer;
//try to delete duplications. Do a generic function that does the request to php
function makeRequest(toPHP, callback) {
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
callback(xmlhttp.response);
}
}
xmlhttp.open("GET",toPHP,true);
xmlhttp.send();
}
function loop() {
var loop_index = document.getElementById("loop_nr").value;
makeRequest("server_side.php?nr="+loop_index, function(response) {
document.getElementById("sumDiv").innerHTML="Total sum = " + response;
clearInterval(timer);
});
timer=setInterval(makeRequest("getter.php", function(response) {
document.getElementById("percentageDiv").innerHTML=response;
}),1000);
}
然后在php端,我们像以前一样检索此调用,并回显$_SESSION['progress']
(就像您已经拥有的)
<?php
session_start();
$progress = $_SESSION['progress'];
echo $progress;
?>
就是这样!
问题内容: 好的,我是AJAX的新手。IE知道请求的生命周期,因此使用了ActiveXObject这样的东西。 但是现在我面临一个现实世界的问题。我有一个在后台运行的servlet,它执行许多任务,并且我想显示一个进度条,以显示流程的执行位置,并还显示实际发生的事情。 到目前为止,在服务器端,我可以计算将要开始的进程数,并且可以轻松地添加一个计数器,以便在每个进程完成后递增-因此使我能够找到自己想
问题内容: 我非常了解Javascript,AJAX和JQuery等,并且我相信可以使用PHP,AJAX和Javascript等创建上传进度栏。 我很惊讶如何获得上传的大小(意思是我想知道的每一秒,上传了多少文件,还有多少剩余,我认为应该可以使用AJAX等)文件正在上传中。 这是PHP手册的链接,但我不明白: http //php.net/manual/en/session.upload- pro
问题内容: 我有一个表单,可以使用AJAX将图像上传到PHP脚本 这是我的表格 结果div是显示PHP输出的位置(请参见AJAX) 进度栏是我希望看到引导进度栏的地方。 这是我的AJAX 现在,我得到一个输出,向我显示PHP中回显的数据。但是由于某种原因,我无法使进度条正常工作。 可能是什么问题? 问题答案: 去除 解决了。但我现在需要看看如何重置标准。
问题内容: 我有一个网站,该网站的表单使用PHP发送表单数据。有没有一种方法可以在页面上创建一个进度条,使它看起来像正在运行,所以人们单击按钮并发送PHP信息后,不必单击按钮多次。 谢谢。 问题答案: 进度栏:简单文本版本: 进度栏:基于PHP(语法):
问题内容: 我需要为我的php上传网站创建进度栏的帮助。我已经整理了上传和摘录部分,但我需要进度条的帮助。我不确定该怎么做。另外,上传文件的最大大小是多少? 的HTML 的PHP 问题答案: 您可以进行一些更改以适合需要,但是如果您需要进度条,则效果会很好。您可以添加更多事件监听器,并根据需要进行设置。希望这对您来说是一个很好的起点。
问题内容: 我有以下代码: 我希望进度条位于单独的线程中,因此它不会冻结应用程序,但是我似乎找不到解决方法。 谁能帮忙吗? 问题答案: 我认为您可能会误会。您需要在单独的线程中进行工作,以免冻结应用程序。但是您还希望能够更新进度条。您可以通过使用创建工作人员类来实现此目的。QThread能够发出信号,您的UI可以侦听并采取适当的行动。 首先,让我们创建您的worker类。 因此,既然您拥有一个工人