Bonjour à tous,
Je me permets de reposter cette question ... car j'avoue que j'ai vraiment du mal a y trouver une solution sur les forums..
le cadre :
Sur mon petit Raspberry PI, je fais mes débuts en robotique/domotique.
j'ai actuellement 4 diodes de branchées sur les PIN du Rasp.
Une petite page web :
Dans la partie supérieure, Des input Button :
- sur son onMouseDown : je lance une requête AJAX.
- sur son onMouseUp : je lance une autre requête AJAX.
actuellement cela fonctionne très bien de la façon suivante :
- l’appui sur un bouton allume une diode.
- la relâche du bouton : la diode s’éteint.
Mais aujourd'hui, je ne veux plus simplement allumer la diode, je veux la faire clignoter, le temps que je reste appuyé sur le bouton.
J'ai donc modifier mes pages php de la façon suivante :
onMouseDown : lance une requête AJAX qui charge la page php qui fera :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 echo "Entre dans la boucle : ".date( 'H:i:s' )."<br/>"; flush(); $_SESSION['i'] =0; $_SESSION['boucle'] = true; while( $_SESSION['i'] < 10000000 and $_SESSION['boucle'] ){ $_SESSION['i']++; } echo "Il y a eu ".$_SESSION['i']." boucles ... ".date( 'H:i:s' )."<br/>"; flush();
onMouseUp : Lance la 2eme requête AJAX qui change la page php :
Vous comprenez que je tente d’arrêter la 1ere requête en lançant la 2nd.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $_SESSION['boucle'] = false; echo "FIN ".date( 'H:i:s' )."<br/>";
Mais qu'importe le code de la 1ere ou de la 2eme requête... la 2nd est toujours lancée après la 1ere...
==> prouvé par le date( 'H:i:s' )... s'affiche :
- J'ai tenté de mettre un sleep dans la boucle de la 1ere Req ...( peut-être le thread occupe tellement le serveur qu'il n'a plus de bande passante pour exécuter la 2nd, mais je doute!)... résultat identique...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Entre dans la boucle : 09:36:00 Il y a eu 10000000 boucles ... 09:36:05 Fin : 09:36:05
- J'ai tenté de retirer la boucle ... résultat identique...
coté script AJAX :
J'ai commencé par faire une fonction qui lance la requête AJAX suivante :
du coup :
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 function ajax(adress, div_id) { 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(div_id).innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET", adress, true); xmlhttp.send(); }
N'ayant pas de résultats satisfaisant, j'ai au final mis la fonction 'ajax()' dans mes onPressUp et Down ... avec des noms différent pour la variable "xmlhttp" ... au cas ou onPressUp et Down récupéraient le même "xmlhttp"... mais résultats identiques....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 function onPressDown( who ){ ajax( 'lienpage.php?down='+who, div_id1 ); } function onPressUp( who ){ ajax( 'lienpage.php?up='+who, div_id2 ); }
J'ai testé sur du Wamp 2.2, sur du Wamp 2.0 et sur du serveur web sous Linux Raspbian.
Avec IE, FF ou Chrome...
Rien n'y fait ... !!!
ce qui m’énerve le plus c'est que sur un ancien projet ... j'avais justement le problème inverse !!!!
La 2nd requête se terminait avant la 1ere alors que cette 2nd avait besoin des résultats de la 1ere...
J'ai trouvé quelques POST sur des forums qui attaquaient ce problème ... mais j'avoue que j'ai rapidement trouvé les limites mes compétences Ajaxiennes!!!
Merci d'avance à tous ceux qui prendrons un peu de temps pour me répondre
DF4ze
Partager