[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