进度条AJAX和PHP [英] Progress bar AJAX and PHP
问题描述
我要创建一个服务器端的任务进度条(用PHP编写)
I want to create a progress bar for a server-side task ( written in php )
有关学习的目的的例子,任务是非常简单的。
我会在客户端页面上的文本字段,读号
,将它传递给使用Ajax的PHP脚本,使之计算所有数字从0到数
(简单的任务,需要一段时间进行大的数字,只是为了模拟一些服务器端的工作)
For learning purposes the example and task would be very simplistic.
I would have a text field on the client page, read a number
, pass it to the php script with ajax and make it calculate the sum of all numbers from 0 to number
( simplistic task that would take some time for big numbers, just to simulate some server-side work)
在.html文件我会创造一个计时器,将调用一个函数,每个 N
秒让我的for循环得和更新进度条的索引。
in the .html file I would create a timer that would call a function every n
seconds getting the index that my for loop got to and update a progress bar.
我的问题是:
是否有可能在同一个PHP文件中的两个功能,我怎么能叫一个特定的功能使用Ajax:一个会阻碍循环,以号
和另外一个我称之为获取当前指数的for循环得。
My question is :
Is it possible to have in the same php file two functions , and how can I call a specific function with ajax : one that would block looping to number
and another one I would call to get the current index the for-loop got to.
在code我到目前为止有:
The code I have so far :
<!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
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
getter.php
<?php
session_start();
$progress = $_SESSION['progress'];
echo $progress;
?>
感谢您!
推荐答案
您的问题将有两个:
- 我该怎么办AJAX在PHP中调用特定的函数?
- 如何做AJAX的进度条?
您AJAX code是罚款。你必须做你的PHP中的唯一的事情就是接受这一呼吁。
Your AJAX code is fine. The only thing you have to do in your PHP is receive this call.
看看你的要求。你送一个变量 NR
您的要求:
Look at your request. You send a variable nr
with your request:
server_side.php?NR =+ loop_index
这将帮助我们在php code,以确定这是一个AJAX调用做求和运算。现在,在PHP:
That will help us in the php code to determine that this is an AJAX call to do the sum operation. Now in the 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;
}
这就是它。
Thats it.
我们还需要进行其它AJAX调用请求的进展PHP。
首先,我们做另外一个AJAX调用来检索与计时器进步!
We need to make other AJAX call to request the progress to PHP.
First, we do another AJAX call to retrieve the progress with a timer!
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 ['进步']
(因为你已经有了)
Then in the php side we retrieve this call as we did before and echo the $_SESSION['progress']
(as you already have)
<?php
session_start();
$progress = $_SESSION['progress'];
echo $progress;
?>
这就是它!
这篇关于进度条AJAX和PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!