Barre de progression de l'AJAX et PHP
Je veux créer une barre de progression pour une tâche de côté serveur ( en php )
À des fins d'apprentissage, l'exemple et la tâche serait très simpliste.
Je voudrais avoir un champ de texte sur la page du client, lire un number
, la passer au script php avec ajax et faire calculer la somme de tous les nombres from 0 to number
( simpliste tâche ce serait prendre un certain temps pour les grands nombres, juste pour simuler un travail côté serveur)
dans le .fichier html je voudrais créer un timer qui permettrait d'appeler une fonction à chaque n
secondes d'obtenir l'indice que ma boucle for obtenu et mettre à jour une barre de progression.
Ma question est :
Est-il possible d'avoir dans le même fichier php deux fonctions , et comment puis-je appeler une fonction spécifique avec ajax : l'une qui pourraient bloquer la boucle de number
et un autre que j'appellerais pour obtenir le courant de l'indice de la boucle for obtenu.
Le code que j'ai pour l'instant :
<!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;
?>
Merci!
$_SESSION
à persister.Je suis de nouveau à ajax et php, je vais poster le code que j'ai jusqu'ici
Je viens de penser à ça. Ma question est comment puis-je appeler avec ajax une fonction spécifique de php?
Je pense que le PHP que vous avez est plus important que l'AJAX. Le poster aussi.
OriginalL'auteur Iulian Rosca | 2013-12-08
Vous devez vous connecter pour publier un commentaire.
Pas seulement une question ici
Votre question peut être deux:
Comment puis-je faire des appels AJAX pour des fonctions spécifiques en PHP?
Votre code AJAX est très bien. La seule chose que vous avez à faire dans votre PHP est de recevoir cet appel.
Look à votre demande. Vous envoyer une variable
nr
à votre demande:server_side.php?nr="+loop_index
Qui va nous aider dans le code php pour déterminer que c'est un appel AJAX pour faire l'opération de somme. Maintenant dans le PHP:
C'est tout.
Comment puis-je faire une barre de progression avec AJAX?
Nous avons besoin de faire autre appel AJAX pour demander le progrès de PHP.
Tout d'abord, nous faire un autre appel AJAX pour récupérer les progrès avec un timer!
Puis dans le php côté nous récupérer cet appel comme nous l'avons fait avant et l'écho de la
$_SESSION['progress']
(que vous avez déjà)Et c'est tout!
Problème résolu, j'ai eu un problème de blocage parce que je n'étais pas la fermeture de la session pour que les requêtes ajax où pas en parallèle. Je suis le marquage de votre question comme une réponse parce que vous m'a beaucoup aidé! Merci!!!!
Je suis content que cela vous a aidé!
OriginalL'auteur Tomas Prado
Voici la solution pour faits de la barre de progression en PHP sans javascript seulement sur le côté serveur:
OriginalL'auteur ZiupeX