traitement asynchrone javascript et ecriture dans fichier en php

Petit nouveau ! | 3 Messages

16 avr. 2019, 12:01

j’étudie la notion de javascript et de traitement asynchrone.
en PHP je crée une page qui affiche une liste de 20 entiers chacun entre deux balises <b></b>
en javascript je parse la page web pour récupérer les nombres
j’écris chaque nombre à la suite dans un fichier en appelant xhr.open("GET", "write_entree.php?entree="+ sentree +"&fichier=" + sfichier, true);
le retour dans la console indique bien un état 4 pour les 20 valeurs

mon soucis est que le fichier créé ne contient pas les 20 valeurs ( c'est aléatoire)
j'ai par exemple :1,6,2,4,8,9,5,10,13,12,14,16,15,18,20,19
il manque 3,7,11,17 par exemple.

Serait-ce un soucis d'écriture dans le fichier et comment le traiter?
merci pour votre aide.

Code : Tout sélectionner

<html> <body> <?php for ($i=1;$i<=20;$i++) echo ("<b>".$i."</b>"); $fic=date('d-m-Y-H-i-s'); ?> <script type="text/javascript"> function getXMLHttpRequest() { ...} function request(entree,fic) { var xhr = getXMLHttpRequest(); var sentree = encodeURIComponent(entree); var sfichier = encodeURIComponent(fic); xhr.open("GET", "write_entree.php?entree="+ sentree +"&fichier=" + sfichier, true); xhr.onreadystatechange = function() { if (xhr.readyState==4 &&(xhr.status == 200 || xhr.status == 0)) { n++; console.log("valide=",xhr.status,xhr.readyState,xhr.responseText,n); }else{ console.log("invalide=",xhr.status,xhr.readyState,xhr.responseText); } } xhr.send(null); } fic="<?php echo $fic;?>"; xhr=getXMLHttpRequest() ; n=0; var x = document.getElementsByTagName("b"); for (i = 0; i <x.length; i++) { entree=x[i]["innerText"]; request(entree,fic) } </script> </body> </html>
et le fichier ecriture en php:

Code : Tout sélectionner

<?php if (isset($_GET["fichier"]) ) { $fic=$_GET["fichier"].".txt"; }else{ $fic='erreur.txt'; } if (isset($_GET["entree"]) ) { $entree=$_GET["entree"]; } else { $entree="rien"; } if ($file = fopen($fic, "a+")) { fwrite($file,$entree."\r\n"); fclose($file); } else { echo "PROBLEME!!!!"; } ?> ]

Mammouth du PHP | 1967 Messages

16 avr. 2019, 13:26

Je pense que tu mets les 20 script en concurence en les appelant en même temps. du coup il suffit qu'un script mette une microseconde de plus qu'un autre pour qu'il ai chargé une version plus ancienne et écraser une autre.

il vaut mieux regrouper tes requètes en une. par exemple en mettant tes 20 entiers dans une chaine en JSON et ne faire qu'un seul appel qui écrira ton fichier.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 3 Messages

16 avr. 2019, 14:00

merci , j'imaginais bien cette solution pour éviter le soucis, mais je m'interrogeais quand même sur le principe d'un systeme qui recevrait des infos à la volée et qui devrait enregistrer les données..en utilisant une sorte de pile ou de cache...

Petit nouveau ! | 3 Messages

16 avr. 2019, 18:27

ça marche bien en envoyant les données en tableau , mais ça n'a plus d’intérêt de faire de l'asynchrone.
merci encore.