Bonjour à tous!
J'ai un petit problème de curiosité.
Avant tout, je sais et je n'oublie pas que Javascript concerne le côté client et PHP le côté serveur.
MAIS voici mon soucis:
Le but: créer sur une page un bête bouton qui arrête le chargement(mais de façon propre, bien sûr, pas comme le bouton du navigateur)
Pour simplifier on va dire que le traitement que j'effectue est une grande boucle...
Dedans, j'ai une fonction JS qui teste si un flag de demande d'arrêt est levé.
1 2 3 4 5 6 7 8 9 10 11 12
|
<?php
for(int $i=0;$i<100000000000000;$i++){
//Je teste si l'utilisateur a demandé le stop
echo"<script type='text/javascript'>teststop();</script>";
//Je fais mon traitement avec des affichages dedans
ma_fonction_A();
ma_fonction_B();
etc...
}
?> |
Pour cela, j'ai défini au préalable les fonctions suivantes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<script type="text/javascript">
//Variable stop : c'est un flag pour savoir si l'utilisateur a
//voulu interrompre la page
var stop= '1';
//Fonction déclenchée par le bouton "interrompre"
function stopper(){
stop = '0';
}
var arreter_execution="<?php echo('Hello DVPZ!'); ?>";
//Fonction executée pendant la boucle de traitement si
//le flag d'interruption est levé
function teststop(){
if (stop=='0'){ document.write(arreter_execution); }
}
</script> |
Voilà, alors tout cela me permet (et ça marche) d'afficher, dès le moment où l'utilisateur à cliqué, d'afficher mon message, à chaque début de boucle.
Là où je ne comprends plus, c'est lorsque je remplace mon
var arreter_execution="<?php echo('Hello DVPZ!'); ?>";
par un
var arreter_execution="<?php exit('Interruption!'); ?>";
Dans ce cas là, la page ne se charge même pas, elle reste blanche.
Je me dis que c'est comme si le document.write avait été déclenché à la fin du traitement et du coup aurait remplacé tout le contenu.
Mais alors, pourquoi? Car le traitement n'a pas encore eu lieu?
Et même s'il avait eu lieu, pourquoi le message "Interruption!" n'apparait-il pas? Parcequ'aucun script PHP n'a pu être interrompu?
Voilà, j'espère que ce n'est pas trop tordu...
Et si vous avez d'autres solutions à mon but, n'hésitez pas 
Merci d'avance!
Partager