De situatie is dat ik een database bewerking moet doen die nogal lang duurt (letterlijk minuten). De bewerking start ik via een ajax call, waar ik verder niet op het resultaat wacht. Tegelijkertijd start ik een loop om elke zoveel seconde de voortgang te controleren en die ook op het scherm te laten zien aan de gebruiker.

Bij mijn weten is ajax asynchroon en zou je dus gewoon een volgende call moeten kunnen starten als de vorige nog niet compleet is. Op een andere pagina maak ik bijvoorbeeld 8 calls tegelijk, waarbij het duidelijk is dat die ook tegelijkertijd worden afgehandeld door de server (niet in mijn testomgeving lokaal overigens, maar wel op mijn VPS).

In dit geval werkt het echter niet. De check call krijgt pas een resultaat terug van de server als de eerste call helemaal is afgehandeld door de server. Met andere woorden, ik zie nog steeds geen progressie in het verloop. Mijn vraag is nu dus, waarom niet? Kan het door de database komen die door de vele inserts helemaal gelocked is? Mijn tabellen zijn InnoDB en dus zou er rowlocking moeten zijn, niet de gehele tabel.
Probleem is inderdaad opgelost door de sessie te sluiten. Op zich heb ik die wel nodig, want ik moet weten welke gebruiker is ingelogd, maar door de sessie direct te sluiten aan het begin van de call die de inlees actie start (via [php]session_write_close[/php]) kan de andere call gewoon afgehandeld worden. Die loop loopt nu dus en de progressie wordt getoond op het scherm zoals ik wil.

Nu alleen nog even die header erbij implementeren.

Reageren