Je vous explique rapidement, ne sachant pas s'il est possible de faire ce genre de chose étant donné que le php est coté serveur et le javascript coté client.

J'aimerais exécuter une fonction Js à l'intérieur d'une condition php (donc sans être en réaction à un event particulier).

D'après ce que j'ai cru comprendre, on peut exécuter du Js dans du php en le mettant dans un echo.
Mais tous les exemples que j'ai pu croiser ne montre à chaque fois qu'une fonction.

Hors moi, ma fonction est censé en appeler une autre; en gros il s'agit de faire l'appel AJAX de getValue toute les secondes.

Du coup, j'ai mis la fonction getValue en fonction interne de startTimer.



Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
echo'<script type="text/JavaScript">
                function startTimer(){
                     function getValue(){
                    var xhr=(function(){
                    if(window.XMLHttpRequest)
                        xhr=new XMLHttpRequest();
                        else if(window.ActiveXObject){
                            try{
                                xhr=new ActiveXObject("Msxml2.XMLHTTP");
                            }catch(e){
                                xhr=new ActiveXObject("Microsoft.XMLHTTP");
                            }
                        }else{
                            xhr=false;
                        }
                    return xhr;
                })();
 
                if(!xhr)return null;
 
                xhr.open('GET','isWaiting.php',false);
                xhr.send(null);
                return(xhr.readyState==4&& xhr.status==200)?xhr.responseText:null;
                };
 
                    setTimeout(getValue,1000);
                }';

Q1- Est ce que le code Js mis dans l'echo sera bloquant ? i.e que setTimeout faisant des appels infinis si je puis dire, et ce code étant dans l'echo du php, est ce que je fais rester bloqué ici sans afficher le reste de la page ?

Q2- Est ce que je peux appeler la fonction dans ma condition php depuis un fichier Js comme j'ai l'habitude de le faire pour éviter de mélanger les deux; sachant qu'elle n'est pas affiliée à un event ?


===============

L'idée c'est que je vais devoir check régulièrement le contenu d'une table sql pour à moment donné faire une redirection vers une autre page.

Je pourrais garder l'utilisateur en le forçant à rester sur la page en faisant une sorte de boucle infini en mettant un header vers sois même et ainsi exécuter de nouveau les requêtes que je veux, mais si je peux arriver au même résultat sans recharger la page avec AJAX ça serait mieux je pense (surtout que si je flingue les historiques de mes users en moins de 60 secondes ils vont me lyncher^^)


EDIT:

Bon voilà ce que j'ai tenté, mais on dirait que ça ne marche pas

wait.js

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
function getValue(){
		var xhr=(function(){
			if(window.XMLHttpRequest)
				xhr=new XMLHttpRequest();
			else if(window.ActiveXObject){
				try{
					xhr=new ActiveXObject("Msxml2.XMLHTTP");
				}catch(e){
					xhr=new ActiveXObject("Microsoft.XMLHTTP");
				}
			}else{
				xhr=false;
			}
			return xhr;
		})();
 
		if(!xhr)return null;
 
		xhr.open('GET','isWaiting.php',false);
		xhr.send(null);
		return(xhr.readyState==4&& xhr.status==200)?xhr.responseText:null;
	};
 
 
function goToFight(){
    document.location.href="wayofshogun.olympe.in/traitement/combat.php";
};
 
 function startTimer(){  
        var fight=getValue();
        if(fight==0){
            //On ne doit plus attendre
            goToFight();
        }else{
            //Il faut continuer de vérifier
            startTimer();
        }      
 
    };

Dans mon fichier php pour lancer le script dans une condition j'ai

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
echo '<script type="text/JavaScript" src="./wait.js">
                    startTimer();';

La page isWaiting qui devrait être appelé par ajax

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
<?php 
  session_start();
  require_once("./../BDD/connect.php");
   $connexion = mysqli_connect(SERVEUR,NOM,PASSE,BASE);
    if(!$connexion) //si erreur
    {
            echo "Désolé, connexion à ".SERVEUR." temporairement impossible !";
            echo "Essayez plus tard !"; 
    }
    //CONNEXION OK
 
     if(isset($_SESSION['pseudo'])){
            $pseudo=$_SESSION['pseudo'];
        }else{
             header('Location: ./notFound.html');
        }
      //on recup notre pseudo
        $reqId="select idU from Utilisateur where pseudo='$pseudo'";
        $resId=mysqli_query($connexion,$reqId);
        //Un seul résultat possible
        $emp=mysqli_fetch_assoc($resId));
        $id=$emp['idU1'];
        //on check si on peut rentrer en match
       $request="select waiting from WaitMach where idU1='$id'";
       //un seul res possible
       $resReq=mysqli_query($connexion,$request);
       $emp=mysqli_fetch_assoc($resId));
                   echo $emp['waiting'];
 
 
?>