1

Bon, j'ai un problème assez chiant à régler.
J'ai des traitements à faire, et j'ai besoin d'afficher les retours de ces traitements en temps réel dans une page web (de préférence dans différents div ; au pire je peux faire ça dans des iframes, mais je ne pense pas que ça apporte une solution à ma problématique). Je suis en PHP, je peux utiliser du js autant que je veux tant que c'est compatible avec les navigateurs courants.
Juste pour situer un peu le contexte, la fonction de l'outil est de créer des comptes LDAP en récupérant des informations (mais mon problème est vraiment lié aux technologies Web, pas à LDAP).

La séquence se déroule de la façon suivante :
Phase 1 :
[ul] [li]Je fais une extraction de bases de données (différents formats, ça peut être des requêtes sur socket ou fichier) qui me permet de générer une liste d'individus.
[li]Pour chaque élément de cette liste, je peux être amené à réaliser d'autres requêtes (compléments d'informations...).
[/ul]
Phase 2 :
[ul] [li]Je récupère l'ensemble des comptes de l'annuaire correspondant à la population que je suis en train de synchroniser
[/ul]
Phase 3 (pour chaque élément de la liste, en une seule passe) :
[ul] [li]J'effectue une série de requête dans d'autres référentiels, afin de lier les comptes créés à d'autres comptes déjà existants.
[li]J'effectue une série de tests pour m'assurer de la validité du compte (toutes les informations présentes, identifiant unique, cohérence des données...).
[li]S'il n'y a eu aucun problème, je regarde si un compte existe déjà
[ul] [li]S'il existe déjà, j'effectue une comparaison avec mise à jour si besoin
[li]Sinon, j'effectue une création
[/ul][/ul]
Phase 4 :
[ul] [li]Si un compte est présent dans l'annuaire mais plus dans la base de données, je le marque comme étant à supprimer
[li]Si la marque de suppression est supérieure à 3 mois, je supprime effectivement le compte
[/ul]
Phase 5 :
[ul] [li]J'envoie un e-mail à un alias donné avec un résumé des problèmes et des comptes créés/modifiés/supprimés.
[/ul]

tromb Fichier joint : J2dQ (QuestionHTMLjs.png)

Au moment du résultat d'une opération, je dois avoir à l'écran le résultat de cette opération dans un div de log (noté A sur mon écran).
Au moment de la fin de la phase 3 ou 4 (suivant les cas), je dois avoir à l'écran le résultat de cette opération dans un div (noté B sur mon écran) ; un clic sur chaque élément ajouté dans B doit me permettre de renseigner le div C avec divers renseignements, complémentaires à ceux affichés (données utilisées pour la création/modification, code résultat de l'opération LDAP, durée de l'opération).

Je n'arrive pas à réaliser ces opérations d'affichage proprement. A l'heure actuelle, j'ai un affichage dans A et C assez sommaire et déjà chiant à gérer (enfin, je trouve ; si on me dit que c'est la seule solution, je m'en contente) ; dans B, ça me convient plutôt bien.
Ma page se construit pendant l'opération (il n'y a donc pas d'Ajax, tout est en direct avec un flush();).
Pendant la phase 3 (ou 4), j'effectue l'opération. Après l'opération, j'ajoute dans le div B un span cliquable, qui a dans son onclick toutes les infos que je veux pouvoir afficher dans mon div C (je ne sais pas si c'est très propre vu que je peux avoir une centaine de lignes à transmettre).
Dans ce span cliquable, j'ai mis une icone ; sur le onload de cette image, je lance une interruption qui met à jour les informations du div A (c'est franchement nul comme procédé... si l'image n'est pas présente, l'opération n'est pas réalisée... et le onabort ne résout pas ce problème... et c'est conceptuellement vraiment moche... et en plus, ça me contraint à afficher une image dès que je veux mettre à jour le div A, alors que je veux pouvoir le faire sur n'importe quelle opération... et ça me fait des onXXXX avec des paramètres particulièrement verbeux).

Je connais mal les interruptions possibles en javascript (ni les façons de les optimiser). Je suis prêt à utiliser de l'Ajax à foison, mais je ne suis pas certain que ça puisse résoudre mes problèmes... mais je cherche vraiment une solution pour tout ça (si ça se trouve, c'est tout simple et c'est juste que je regarde mon problème d'un mauvais point de vue).

Si vous avez eu le courage de tout lire, félicitations tripo

(Ah et j'ai aussi un problème de CSS... avec Firefox, quand je mets overflow=hidden, il ne me cache pas juste le texte qui dépasse, mais tout le texte trifus)
avatar

2

3

J'ai pas plus qu'un div B sad
avatar

4

vu que c'est une opération longue en un seul coup, je pense pas que ça t'aidera d'utiliser ajax, vu que (en gros) son but est de choper des pages web dans des variables js et rien de plus.

si je comprends bien tu mets des trucs dans le onload des images pour MAJ le contenu des boites du dessus.

Dans ce cas pourquoi pas du js brut dans la page?

5

squalyl (./4) :
si je comprends bien tu mets des trucs dans le onload des images pour MAJ le contenu des boites du dessus.

Exactement.
Dans ce cas pourquoi pas du js brut dans la page?

Tu peux être plus explicite ? (il y a peut-être un truc que j'ai manqué sur le fonctionnement du JS).
avatar

6

je suis pas sur mais si au milieu d'une page tu mets une balise <script> elle sera exécutée au moment ou elle est chargée non? du coup tu peux t'en servir pour appeler une méthode update() qui mettra a jour ton log d'au dessus.

enfin a tester hein.

7

Ah, peut-être... à tester, en effet...
avatar

8

Hmm tu pourrais utiliser de l'AJAX (pastaper tongue).
Afficher ta page normalement.
Faire une requête asynchrone pour l'éxécution du script long et pénible (j'espère que ton serveur n'a pas de timeout ?).
Démarer en parallèle des petites requêtes pour mettre à jour la page de manière progressive.
En gros côté serveur, tu génères une sorte de log des données (Je ne sais pas si on peut avec des sessions, mais ça serait le mieux) avec le gros script, et tu récupères ces données avec le script "léger" (et tu les formates, genre en JSON) qui est appelé régulièrement par javascript / XmlHttp.
Après, les modifications de la page sont à gérer par Javascript en fonction des infos reçues à chaque fois...
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

9

GoldenCrystal (./8) :
Faire une requête asynchrone pour l'éxécution du script long et pénible (j'espère que ton serveur n'a pas de timeout ?).

Non, je n'ai pas de soucis à ce niveau (j'ai la main sur la conf.)...

Hmmm... donc en gros, pour ma balise <body> j'ai un onload (ou alors je peux le faire directement dans la page sans déclencher d'événement ?) qui va exécuter une fonction qui lance d'un part la requête aynchrone et d'autre part un genre de listener javascript qui écoute à intervalle régulier ? Ce "listener" ne risque pas d'être détecté comme un script mettant trop de temps à répondre par mon navigateur ?
avatar

10

je préfère le PAIC, mais pourquoi pas. (enfin j'y avais pensé, mais je voulais éviter de faire un machin coté serveur)

11

./7 > En fait, tu ne peux récupérer que des réponses entières, donc il faut faire plein de petites requêtes "qu'est-ce qu'il y a de neuf ?" du client vers le serveur. Du coup pas de timeout pour ça (par contre pour le gros script, le problème pourrait se poser en effet ^^)
Mais tu peux faire ces petites requêtes à intervalles régulier (une toutes les 5/10/20/... secondes, selon tes besoins et tes moyens techniques).
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

12

GoldenCrystal (./11) :
Mais tu peux faire ces petites requêtes à intervalles régulier (une toutes les 5/10/20/... secondes, selon tes besoins et tes moyens techniques).

Mais comment est-ce que je déclenche ces petites requêtes ? C'est ça mon problème, je ne sais pas exécuter un bout de script autrement que sur un événement (c'est con, hein grin).
avatar

13

Tu peux pas hooker un handler sur l'auto-int 5 ?

dehors

14

elle s'appelle settimeout() l'auto int 5 de javascript trioui

15

Aaaaaah merci (j'ai l'air un peu con du coup)

(Et Martial, t'as le droit d'aller un peu plus loin tongue)
avatar

16

<b>djideji</b>
<script>alert("toto");</script>
<h2>ha ?</h2>

cross : pkoi tu veux passer par un settimeout ?

17

c'est ce que je lui ai proposé tout à l'heure, il doit tester embarrassed

18

oui enfin là je ne vois pas trop l'intérêt hehe (enfin je ne suis pas trop sûr d'avoir bien saisi son problème)

19

PS : l'autoint 5 de js c'est plutôt setInterval tongue

20

J'apprends plein de trucs dans ce topic, merci cheeky (j'étais persuadé qu'on ne pouvait lancer du js que sur un événement, en fait).
Effectivement, la solution de squalyl/penpen devrait marcher (et être facilement adaptable depuis le comportement actuel). Mais celle de GC a l'avantage de me permettre de modulariser les actions (en particulier, l'opération exécutée dans un navigateur web doit pouvoir être lancée régulièrement avec un cron... à ce moment-là, toute la partie présentation ne m'intéresse plus, et je peux utiliser un autre script mais qui appelle le même moteur que celui pour le frontend web).
avatar

21

(Mmmpf ? J'ai proposé une solution acceptable à un problème que je n'ai pas franchement lu ni donc compris ? trifus)

22

Sisi ça t'arrive tu vois grin Quant à l'AI5, j'étais finalement pas si loin, hein ? #triclasse#

23

Pen^2 (./21) :
(Mmmpf ? J'ai proposé une solution acceptable à un problème que je n'ai pas franchement lu ni donc compris ? trifus.gif )

C'est ça la classe tripo
Nil (./1) :
(Ah et j'ai aussi un problème de CSS... avec Firefox, quand je mets overflow=hidden, il ne me cache pas juste le texte qui dépasse, mais tout le texte trifus.gif )

Sinon, si quelqu'un a une info là-dessus, je suis preneur...
avatar

24

Folco (./22) :
Quant à l'AI5, j'étais finalement pas si loin, hein ? triclasse.img

Bah tu rigoles, mais c'est la première chose à laquelle j'ai pensé quand j'ai trifouillé le problème... "putain, sur une TI, c'est simple, y'a l'autoint 5..."
avatar

25

Nil (./23) :
Sinon, si quelqu'un a une info là-dessus, je suis preneur...

tu l'utilises comment au juste ?
tu peux montrer un extrait ?

26

echo "<div id='inside'>";
foreach($users as $user)
{
	[...]
	echo "<span id=\"u".$no_pers."\" onclick='displayInfo(\"".$user['uid']."\", \"$statut\", \"$message\", \"$duree\", \"$no_pers\", \"$ret_messagerie\", \"$ret_formation\", \"$ret_servadm\", \"$ret_recherche\", \"$ret_autocom\")' style='-moz-box-sizing: border-box; -ms-box-sizing: border-box;  box-sizing: border-box; font-size:10px;color:black;width:10%;border:#EFAA23 solid 1px;height:18px;overflow:hidden;background-color:#EFCC53;display:inline-block;'><img style='vertical-align:middle;' src='./twoone/green/checkmark.gif' onabort=\"messageAdd('$num_traitement - ".$user['uid']." : Réussite<br />'\" onload=\"messageAdd('".$user['uid'].": Réussite<br />')\" />$icons<span style='overflow:hidden;vertical-align:middle;font-size:10px;color:black;padding-left:2px;'>".$user['uid']."</span></span>";
	[...]
	$k++;
	if($k==10)
	{
		$k=0;
		echo "<br />";
	}
	flush();
}
echo "</div>";


C'est dans le span (comme c'est un prototype, c'est cracra ; au final, les styles seront bien rangés dans un CSS, mais là je teste en direct).
avatar

27

À priori, je ne vois pas trop...
Tu n'as pas plutôt un extrait de l'html généré ?

28

Je te sors ça demain.
avatar

29

OK smile C'est pas pressé en même temps grin (de mon point de vue)

30

display:inline-block je connais pas, mais ça fait une éternité que j'ai pas touché au développement web, donc... Mais peut-être que Firefox a du mal aussi à cause de ça ?
(je connais display:inline, display:block etc, mais pas inline-block)

edit :
OK, vu ; c'est pas w3c, mais théoriquement c'est bien supporté quand même.