Fonction ne marche qu'une seule fois
Bonjour !
Mon site internet tourne depuis 12 ans mais cet été mon serveur a changé la version de php et mon code était désuet...
Une partie du site ne fonctionnait plus et je pensais que c'était à cause des requêtes sql.
Je reprend donc toutes les requêtes mysql en mysqli et en profite pour améliorer le site.
Tout va bien mais là un simple appel à une fonction javascript me bloque.
Voici un extrait épuré :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| // début du code
function Appeler()
{
// ici je log "debut appeler"
// instructions
TimeA=setTimeout(function() { CheckAppeler(1); }, 2000);// 2 secondes
}
function CheckAppeler(comptetour)
{
// instructions
TimeB=setTimeout(function() { Appeler(); }, 2000);// 2 secondes
}
// fin du code |
Le résultat du log donne ceci :
Citation:
//début de l'extrait du log
2018/09/01 17:18:19 debut appeler
2018/09/01 17:18:23 debut appeler
2018/09/01 17:18:27 debut appeler
2018/09/01 17:18:31 debut appeler
à l'infini....
// fin de l'extrait du log
Tout va bien, un appel a la fonction Appeler aux 4 secondes.
J'obtiens ce résultat avec Firefox, Chrome et Edge en mode local .
Par contre si j'exécute sur internet, j'obtiens:
Citation:
//début de l'extrait du log
2018/09/01 17:18:19 debut appeler
// fin de l'extrait du log
Rien d'autre. On dirait que l'appel a une fonction ne peut se faire qu'une fois (:
Je commence à me demander si ce n'était pas cela qui bloquait le fonctionnement du site...
J'ai php version5.5.8 en mode local et 5.6.37 sur mon serveur net.
j'obtiens le même résultat sur le net avec Firefox, chrome et edge.
Merci de me guider, Jean
problème toujours le même
Merci,
Je connais setInterval mais ce n'est pas la solution. Les lignes de codes dont je vous ai fais grâce contiennent des appels xhr , dont le retour prend parfois quelques millisecondes et parfois plusieurs secondes. C'est pourquoi CheckAppeler est appelé avec un compteur et il tourne sur lui meme , quand la réponses xhr arrive, il effectue des commandes javascript puis rappelle la fonction Appeler juste quand il a fini, en fait 2 secondes après avoir fini. Ca peut parfois prendre 5 ou 20 secondes donc set interval appellerai CheckAppeler trop vite ou trop souvent.
J'ai quand même essayé setInterval et le résultat est exactement pareil: en local ça fonctionne mais pas sur le net.
Pour moi c'est du mystère.
Plus de détail sur le pourquoi de mes appels à Appeler()
Merci pour votre aide,
J'utilise normalement la syntaxe de psychédélic mais en creusant mon problème , j'ai lu que l'autre façon était LA bonne ...
De toute façon lors de mes tests les 2 façons de faire donnent la même réponse.
Donc pourquoi ces appels en boucle? Depuis 12 ans , mon site offre un jeu de carte . 4 clients affichent la table de jeu avec leur 13 cartes.
Chaque deux secondes, un appel xhr vérifie la base de donnée, si aucun changement, on re-appel dans 2 secondes. S'il y a un changement (carte de jouée par un autre joueur par exemple) la réponse du xhr met a jour le déplacement des cartes , qui peut jouer etc. Quand la table est prête , on ré-appel dans 2 secondes.
Avec 4 joueurs aux 2 secondes , une partie qui dure 20 minutes et 10835 rencontres de plusieurs parties ça fait 100 millions de fois que ça fonctionne.
Je veux bien améliorer mon code pour suivre les nouvelles technologies mais quand ça marche en mode local et que les mêmes scripts ne fonctionne pas sur internet je ne sais pas quoi faire.
PS J'ai écrit à mon hébergeur web...
Merci pour votre aide, je retourne tester...
Merci psychadélic et Jreaux62, vous avez raison quand c'est le B.A.BA => avoir la même configuration en test et en Exploitation.
Je fonctionne en local avec EasyPHP DevServer 14.1 VC11 avec php5.5.8 J'ai testé avec la version php 5.3.29 sur mon serveur internet que j'avais il y a 2 mois et le problème est le même. J'hésite donc à modifier mon installation personnelle...La dernière fois ça a été l'enfer pour refaire fonctionner.
J'ai refais des tests en épurant au maximum le code et en ne gardant que l'appel aux fonctions. J'ai aussi loggué différemment.
J'ai pus voir alors que la boucle tourne bien. Il n'y a pas de problème avec l'appel aux fonctions. La question du forum ici est donc résolue.
Par contre mon problème reste entier: je ne sais toujours pas pourquoi il y a des résultats différents.
J'ai bien hâte d'avoir la réponse de mon hébergeur web.
Bonne programmation à tous!