[PHP] Loading page wanneer data wordt opgehaald

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil graag een pagina waar een form in gesubmit wordt graag voorzien van een "Loading Page" layer en pas doorsturen naar de volgende pagina als alle output data binnen is.

Dit lijkt wat lastiger dan wellicht is, maar ik ben nog niet tot een oplossing gekomen.

Er zijn verschillende methoden om dit te doen:

- Output buffering
- Flush (Ook Output buffering)
- Jquery
- Ajax
- Javascript.

Zelf ben ik wel een fan van Output buffering mits dit op de juiste manier gebeurt, aangezien je alles dan bij PHP houdt, alleen kan dit wel wat tricky worden.

Ik bouw de pagina op doormiddel van een header, main en een footer te includen. een pagina wordt pas geheel weergegeven wanneer de laatste </html> is ontvangen door de browser, en dit is dus het probleem wat ik ondervindt, mijn script wordt geprocessed, maar laat alleen de header zien en wanneer alle data binnen is de rest van de pagina.

Er zijn een 2 tal mogelijkheden denk ik om dit te doen, uiteraard zijn er meer, maar dit lijken me de meest logische.

1. Doormiddel van javascript een layer te plaatsen over de pagina nadat er gesubmit wordt en doorverwijzen naar de output pagina al alle data binnen is.

2. Doorverwijzen naar een "processing" pagina welke weer doorlinkt naar een output pagina, dit zou goed kunnen in combinatie met PHP.

Ajax is wel heel erg realtime en zou wellicht de beste oplossing bieden, alleen ben ik geen Ajax mens :)

Tuurlijk zoek ik naar online voorbeelden, ik kom er alleen achter dat de voorbeelden erg uiteen lopen en vaak niet volledig zijn in uitleg.

Wat kan ik volgens jullie het beste gebruiken ? Javascript is opzich wel default tegenwoordig, dus dit zou prima moeten werken en lijkt ook een goede optie, hoewel ik toch wel erg voor een PHP oplossing zou willen gaan in combinatie met flush.

Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Ik zou gaan voor een javascript/Ajax methode. Zoek een eenvoudige Ajax library die goed is gedocumenteerd, en je komt er vast wel uit. Voor toegankelijkheid zou ik er voor zorgen dat het formulier ook werkt als javascript niet aanwezig of niet enabled is.

Hoe wou je dit oplossen met bufferen? PHP is immers stateless, dus je moet hoe dan ook een nieuwe pagina laden. Met javascript kan je dan ondertussen nog een melding weergeven.

Acties:
  • 0 Henk 'm!

Verwijderd

Alleen een client-side applicatie-achtige opzet is een oplossing in dit geval. Dat wordt dus gebruik maken van Ajax, of gewoon ouderwetse javascript in een iframe.

Als die voor een "gewone" website is zou ik "onsubmit" een throbber tonen, en het laten voor wat het is. Voor een applicatie zou je verder kunen gaan.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op zaterdag 03 mei 2008 @ 17:16:
Alleen een client-side applicatie-achtige opzet is een oplossing in dit geval. Dat wordt dus gebruik maken van Ajax, of gewoon ouderwetse javascript in een iframe.

Als die voor een "gewone" website is zou ik "onsubmit" een throbber tonen, en het laten voor wat het is. Voor een applicatie zou je verder kunen gaan.
Ben ik niet geheel met je eens.

Waarom zou je het PHP niet op laten lossen als het om een query of request richting XML gaat ?

Lijkt mij toch echt een mooiere oplossing.

Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb geen idee wat je nu uit je nek kletst, dus daar kan ik je niet mee helpen. Wat jij wilt werkt niet zoals jij zou willen dat het werkt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op zaterdag 03 mei 2008 @ 18:53:
Ik heb geen idee wat je nu uit je nek kletst, dus daar kan ik je niet mee helpen. Wat jij wilt werkt niet zoals jij zou willen dat het werkt.
Je scripts is dan in dat geval afhankelijk van de client, dat wil je serverside natuurlijk nooit !

Acties:
  • 0 Henk 'm!

  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Verwijderd schreef op zaterdag 03 mei 2008 @ 19:33:
[...]
Je scripts is dan in dat geval afhankelijk van de client, dat wil je serverside natuurlijk nooit !
Ehrm... met Ajax websites doe je niks anders. Het is tegenwoordig zelfs the way to go!

Er wordt ook al veel onderzoek gedaan naar technieken die de code zoveel mogelijk "balancen" tussen de server en de client. En als je er over nadenkt waarom ook niet? (Microsoft is op dit moment bijvoorbeeld bezig met het Volta project, waarmee je dynamisch asp.net webapps kan 'verspreiden' over de diverse endpoints (clients/servers) waarmee je applicatie te maken heeft).

Daarnaast moet je gewoon in termen van oplossingen denken in dit geval. En deze oplossing (client/server side coden dus) is in jouw geval de beste oplossing (zoniet de enige oplossing).

[ Voor 14% gewijzigd door Laurens-R op 03-05-2008 19:46 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Verwijderd schreef op zaterdag 03 mei 2008 @ 19:33:
[...]


Je scripts is dan in dat geval afhankelijk van de client, dat wil je serverside natuurlijk nooit !
Is die loading page 100% noodzakelijk om te zien? Zoja, dan server side doen. Zonee, dan clientside doen.

Zowieso ga je het server side niet netjes redden. Een gedeelte van het het wachten zit ook nog eens in het oversturen naar de client en het js inlezen aan de client kant.

Client side kan 99% bepalen of de client klaar is, server side zegt niets over hoe klaar de client is...

Acties:
  • 0 Henk 'm!

Verwijderd

Gomez12 schreef op zaterdag 03 mei 2008 @ 20:23:

Is die loading page 100% noodzakelijk om te zien? Zoja, dan server side doen. Zonee, dan clientside doen.

Zowieso ga je het server side niet netjes redden. Een gedeelte van het het wachten zit ook nog eens in het oversturen naar de client en het js inlezen aan de client kant.

Client side kan 99% bepalen of de client klaar is, server side zegt niets over hoe klaar de client is...
Juist. En dat is precies de reden waarom je alleen een applicatie-achtige manier van werken moet gebruiken als je daadwerkelijk met zoiets bezig bent. De meeste mensen zijn inmiddels echt wel gewend aan de laadtijden. Zeker als je onsubmit een throbber laat zien en de submitknop disablet.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
OK, ik kom uit op deze methode:

http://techxplorer.com/20...-an-ajax-loading-message/

Dit zou opzich goed werken, alleen vind ik het niet zo mooi dat je in het javascript kunt zien welke php file je include, puur path-gerelateerd gezien.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Verwijderd schreef op zaterdag 03 mei 2008 @ 22:11:
OK, ik kom uit op deze methode:

http://techxplorer.com/20...-an-ajax-loading-message/

Dit zou opzich goed werken, alleen vind ik het niet zo mooi dat je in het javascript kunt zien welke php file je include, puur path-gerelateerd gezien.
Tja, je zal toch ergens (middels AJAX) je content vandaan moeten halen, terwijl je een 'laad venster' hebt... ;) En client side kan je dat niet op een path-basis doen... ;)

Wat is er trouwens mis mee dat mensen dat kunnen zien? PHP word toch gewoon geparsed door je webserver, dus niemand zou 'zomaar' je code moeten kunnen zien... ;)

[ Voor 13% gewijzigd door CH4OS op 04-05-2008 02:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
GJ-tje schreef op zondag 04 mei 2008 @ 02:18:
[...]
Tja, je zal toch ergens (middels AJAX) je content vandaan moeten halen, terwijl je een 'laad venster' hebt... ;) En client side kan je dat niet op een path-basis doen... ;)

Wat is er trouwens mis mee dat mensen dat kunnen zien? PHP word toch gewoon geparsed door je webserver, dus niemand zou 'zomaar' je code moeten kunnen zien... ;)
Ja dat is de issue waar ik ook tegenaan liep.

Opzich is het geen probleem om die file of het path te kunnen zien, toch vond ik een mooie include toch netter ;)

Ik zoek gestaag verder !

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Of je bedenkt problemen die er niet zijn, of je hebt het verschil tussen client en serverside nog steeds niet helemaal helder. :> De client weet altijd waar een request heen moet... :z

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voutloos schreef op zondag 04 mei 2008 @ 11:49:
De client weet altijd waar een request heen moet... :z
Ja dat klopt, alleen wil ik niet dat de client gaat refreshen bijvoorbeeld na 4 seconde terwijl het script er een keer 6 seconde over doet omdat een server waar hij mee praat het even druk heeft.

Dit probeer ik helder te krijgen.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Die sleep(4) is enkel om te simuleren dat dat PHP script een merkbare executietijd heeft. :> Voor die tutorial is het dan ook verder niet boeiend wat het aangeroepen script uberhaupt moet doen.

En die sleep zit dus serverside, want je hele probleem was dat het script op server de nodige tijd duurt. Client heeft geen benul van die (nu) 4 seconden, dus je haalt wel client en serverside door elkaar. B)

[ Voor 36% gewijzigd door Voutloos op 04-05-2008 12:06 ]

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voutloos schreef op zondag 04 mei 2008 @ 12:04:
En die sleep zit dus serverside, want je hele probleem was dat het script op server de nodige tijd duurt. Client heeft geen benul van die (nu) 4 seconden, dus je haalt wel client en serverside door elkaar. B)
Dat klopt, maar ik heb hier nog wel wat voorbeelden welke ook met een executie-tijd werken, alleen clientside via javascript.

Ik zou natuurlijk iets kunnen doen met een frefresh elke 2 seconde.

Of nog een meer dirty manier; Submit.php -> progress.php -> results.php

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Tja, ik weet niet welke voorbeelden jij allemaal bekijkt, maar jij wist zelf al dat je een op de client onbekende wachttijd hebt.

En het kan op die dirty manier, maar dan wordt het geen nette redirect.

Pak anders gewoon die laatste tut en bouw het eens en doe daar wat ervaring/inzicht mee op. :) Want jij probeert nu een kant en klare oplossing te zoeken/lezen, maar het gaat er om dat je wat technieken leert en die zelf naar wens weet toe te passen. ;)

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voutloos schreef op zondag 04 mei 2008 @ 12:15:
Pak anders gewoon die laatste tut en bouw het eens en doe daar wat ervaring/inzicht mee op. :) Want jij probeert nu een kant en klare oplossing te zoeken/lezen, maar het gaat er om dat je wat technieken leert en die zelf naar wens weet toe te passen. ;)
Dat doe ik zeker en ben druk aan het vergelijken wat de beste optie is.

Ik wil niet een klets en klare oplossing maar juist er achter komen wat de beste oplossing is :)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Refreshen? Ajax? Pollen?

Volgens mij laat een browser pas de volgende pagina zien wanneer hij deze binnen krijgt van de server. Door gewoon met javascript een div met een loading animatie oid zichtbaar te maken zodra er op submit gedrukt is heb je keurig je loading pagina. Deze gaat automatisch weg zodra de volgende pagina binnen is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:44

orf

Voor dure operaties heb ik wel eens zoiets gebruikt:

Zodra het formulier gesubmit wordt, start het script een ander CLI script. Dit CLI script schrijft naar de database weg hoeveel er processed is (0/100, 10/100, etc). Met een simpel scriptje lees je diezelfde data weer uit (ajax) en laat je daarmee een mooie progressbar tonen. Na 100% toon je de resultaten die ook weer in de database zijn opgeslagen.

Als de pagina wordt gesloten loopt het CLI script gewoon door, je hebt alleen de polling van het ajax script gesloten.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op zondag 04 mei 2008 @ 12:30:
Refreshen? Ajax? Pollen?

Volgens mij laat een browser pas de volgende pagina zien wanneer hij deze binnen krijgt van de server. Door gewoon met javascript een div met een loading animatie oid zichtbaar te maken zodra er op submit gedrukt is heb je keurig je loading pagina. Deze gaat automatisch weg zodra de volgende pagina binnen is.
Hoe wil jij dit duidelijk maken naar de client ?

Refreshen? Ajax? Pollen?

Of waren deze woorden onduidelijkheden voor je en volgens jou niet noodzakelijk ?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Janoz herhaalt gewoon wat Cheatah in zijn eerste post zegt. Maak na het indrukken van de knop duidelijk dat user geduld moet hebben en klaar. KISS.

{signature}


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:44

orf

Doe dan in ieder geval wel een ignore_user_abort. Je wilt niet dat een scripts stopt nadat de gebruiker het browserscherm sluit of een andere pagina opent.
Pagina: 1