[TYPO3-UG Dutch] Ajax-probleem
H. Hahn
h.hahn at hahn-informatica.nl
Thu Nov 13 15:50:04 CET 2008
Eigenlijk is dit geen Typo3-vraag, maar misschien kan iemand me toch op
weg helpen? Ik heb inmiddels mijn eerste schreden gezet op het gebied
van Ajax (met Prototype.js). Leuk spul. Alleen wat ik wil hebben, lukt
me nog niet.
*Situatie:* Op de server draait een script. Het maakt niet uit wat, maar
het heeft nogal wat tijd nodig (variërend van bij 2 tot 10 minuten). Het
kan bijvoorbeeld gegevensverwerking zijn, of ingewikkelde berekeningen,
of wat dan ook. Alleen het duurt een tijdje. Daarom wil ik in de browser
een voortgangsindicatie weergeven.
Met Ajax.Request en/of Ajax.Updater zonder meer gaat dat niet, want die
zouden het proces steeds opnieuw starten.
Ajax.PeridiodicaUpdater ligt meer voor de hand, omdat die juist bedoeld
is om te pollen. Ik zou het proces kunnen starten met bijv.
Ajax.Request. Vervolgens zou ik Ajax.PeriodicalUpdater kunnen gebruiken
om bijv. elke seconde de status op te vragen. Maar voor zover ik het
begrijp. kan Ajax.Updater alleen informatie van de server zelf opvragen
(bijv. datum en tijd). Ik wil hem echter de status laten opvragen van
een eerder (met Ajax.Request of Ajax.Updater) gestart proces. Als
Ajax.Request het event "Complete" rapporteert, kan ik de
PeriodicalUpdator stoppen.
*Probleem:* Hoe vertel ik Ajax.PeriodicalUpdater dat hij gegevens van
dat eerder gestarte en nog steeds draaiende proces moet opvragen, en
niet van de server zelf?
Bij wijze van test zou ik Ajax.Request bijvoorbeeld een script kunnen
laten starten met:
<?php
for ($i = 0; $i < 100; $i++)
{
$rv = rand (1, 10); // randomgetal tussen 1 en 10
sleep ($rv); // wacht een willekeurige tijd tussen 1 en 10 seconden
... // ??
}
?>
Ajax.PeriodicalUpdater zou dan elke seconde moeten pollen wat de waarde
van $i op dat moment is.
Als dat lukt, zou er een met onregelmatige snelheid een lijst van de
getallen 1...99 moeten worden weergegeven.
Ik zou natuurlijk in bovenstaande lus de waarde van $i in een bestandje
kunnen opslaan en Ajax.PeriodicalUpdater dat laten uitlezen. Maar dat
lijkt me wat omslachtig, te meer daar het in werkelijkheid niet om één
getal ($i) gaat, maar om veel meer gegevens (om een idee te geven: een
in de loop van het proces oplopend aantal regels tekst, waarbij soms
meerdere regels binnen een seconde worden toegevoegd, en het een andere
keer enkele seconden duurt voor er weer een regel bij komt). Ook zal
voor het uitlezen van het bestandje een PHP-scriptje moeten worden
gestart, waardoor het waarschijnlijk niet zal lukken met
Ajax.PeriodicalUpdater en ik Ajax.Updater in een lus met een frequentie
van 1/s kunnen laten draaien.
Ook bestaat het risico dat het pollen soms niet lukt omdat het andere
script net in het bestand aan het schrijven is (hoewel dit valt te
omzeilen).
Graag advies. Bij voorbaat dank.
Mvg.,
H. Hahn
More information about the TYPO3-UG-dutch
mailing list