Soucis avec rafraichissement des données Ajax - PHP
Bonjour à tous,
Le projet vise à faire un tableau d'affichage du classement de compétiteurs dans le cadre d'une course.
J'ai une base de données en mysql qui stocke les participants, le nombre de tour, le temps par tour et le meilleur temps.
Cette base est alimentée par une page php qui gère les passages des compétiteurs -> ca c'est ok. chaque passage est bien comptabilisé et la DB s'actualise.
Le problème réside au niveau de la page d'affichage des résultats qui contient un tableau dynamique.
La page est fixe et doit s'actualiser toutes les minutes.
Au chargement initial c'est bon. J'ai un XMLhttprequest qui va rechercher les données via une requete sql contenue dans un fichier php.
La ou ca bloque c'est lors des actualisations. Vu les logs de la console, je vois que XMLhttprequest est bien lancé mais en retour, au lieu d'avoir des données actualisées, j'ai les données initiales.... un peu comme si quelque part la requete sql du fichier php ne fonctionnait pas. Or je sais qu'elle fonctionne vu que lorsque je force l'actualisation de la page elle me donne les bonnes données.
La où cela devient encore plus étrange, c'est que lorsque j'exécute le tout en local via Xampp cela tourne correctement et c'est lorsque j'exécute sur mon site en ligne que cela me fait ce bug... quelqu'un aurait une idée?
code de la page:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
| <script>
<!-- classement -->
// initialisation
var equipes;
var timerId;
var updateInterval = 60000;
var data
// fetch data and store it in the variable data
var xhReq = new XMLHttpRequest();
xhReq.open("GET", "data.php",true);
xhReq.send();
xhReq.onreadystatechange = function() {
if (this.readyState == 4 ) {
data = JSON.parse(xhReq.responseText);
resetBoard();
}
};
function descending(a, b) { return (a.tours < b.tours || (a.tours == b.tours && a.turntime > b.turntime)) ? 1 : -1; }
function reposition() {
var height = $("#classement .equipe").height();
var y = height;
for(var i = 0; i < equipes.length; i++) {
equipes[i].$item.css("top", y + "px");
y += height;
}
}
function updateRanks(equipes) {
var egal = 0
for(var i = 0; i < equipes.length; i++) {
if (i>0){
if ((equipes[i-1].tours - equipes[i].tours)==0){
equipes[i].$item.find(".rank").text(egal);
} else {
equipes[i].$item.find(".rank").text(egal+1);
egal = egal+1;
}
}else {
equipes[i].$item.find(".rank").text(i + 1);
egal = i+1;
}
}
}
function fetchNewData(data,attributeName,name){
for(var x in data){
if((data[x].name == name) == true) {
return data[x][attributeName];
}
}
return null;
}
function time_convert(num) {
var hours = Math.floor(num / 3600);
var minutes = Math.floor((num - (hours * 3600)) / 60);
if (minutes <= 9) {
minutes = "0" + minutes;
}
var secondes = (num - (hours * 3600) - (minutes * 60));
if (secondes <= 9) {
secondes = "0" + secondes;
}
return hours + ":" + minutes + ":" + secondes;
}
function getNewData(){
// get the new data for each and change to their new values
var newReq = new XMLHttpRequest();
newReq.open("GET", "data.php",true);
newReq.send();
newReq.onreadystatechange = function() {
if (this.readyState == 4 ) {
var newData = JSON.parse(newReq.responseText);
console.log(newData);
for(var i = 0; i < equipes.length; i++) {
var equipe = equipes[i];
equipe.turntime = time_convert(fetchNewData(newData,'time_tour',equipe.name));
equipe.$item.find(".turntime").text(equipe.turntime);
equipe.bestturntime = time_convert(fetchNewData(newData,'best_time_tour',equipe.name));
equipe.$item.find(".bestturntime").text(equipe.bestturntime);
equipe.tours = fetchNewData(newData,'tours',equipe.name);
equipe.$item.find(".tours").text(equipe.tours);
}
equipes.sort(descending);
console.log(equipes);
updateRanks(equipes);
reposition();
};
};
}
function resetBoard() {
var $list = $("#classement");
$list.find(".equipe").remove();
if(timerId !== undefined) {
clearInterval(timerId);
}
equipes = [];
for(let i = 0;i < 20;i++){
equipes.push(
{
name : data[i].name,
tours: data[i].tours,
turntime: time_convert(data[i].time_tour),
bestturntime: data[i].best_time_tour,
}
)
}
for(var i = 0; i < equipes.length; i++) {
var $item = $(
"<tr class='equipe'>" +
"<th class='rank'>" + (i + 1) + "</th>" +
"<td class='name'>" + equipes[i].name + "</td>" +
"<td class='tours'>" + equipes[i].tours + "</td>" +
"<td class='turntime'>" + equipes[i].turntime + "</td>" +
"<td class='bestturntime'>" + time_convert(equipes[i].bestturntime) + "</td>" +
"</tr>"
);
equipes[i].$item = $item;
$list.append($item);
}
equipes.sort(descending);
updateRanks(equipes);
reposition();
// fetch new data for the updateInterval
timerId = setInterval("getNewData();", updateInterval);
}
</script> |
Et voici la page php appelée:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php header('content-Type:application/json');
// connexion à la db */
include("dbconnect.php");
// Si tout va bien, on peut continuer
$donnees = $bdd->query('SELECT id, name, tours, time_tour, best_time_tour FROM resultats ORDER BY id DESC ')->fetchAll(PDO::FETCH_ASSOC);
$donnees = array_reverse($donnees);
print json_encode($donnees);
?> |
merci d'avance pour votre aide
Manu