Toon posts:

[js/php] request object cache situatie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig om met behulp van Javascript de inhoud (dynamische inhoud) van een PHP bestand te laden in een DIV-element, het zogeheten AJAX-model. Alles werkt uitstekekend, in het kort gebeurt er dit;

- Bij het initialiseren van de pagina wordt een request object aangemaakt:
code:
1
http = new ActiveXObject("Microsoft.XMLHTTP");


Vervolgens roep ik een funcie aan bij een mouse-event, in dit geval een mouseclick:
code:
1
2
3
4
5
6
function sndReq()
{
    http.open('get', 'dataverkrijgen.php');
    http.onreadystatechange = handleResponse;
    http.send(null);
}


De functie handleResponse plaats de responseText in een divelement, als de readyState 4 is.
Het is overbodig deze functie te tonen; deze doet gewoon zijn werk.

probleem
Het bestand `dataverkrijgen.php` bevat niets anders dan een echo van de huidige tijd (time()).
Ik probeer nu een situatie te creeeren dat als ik de functie sndReq() aanroep, hij de huidige tijd (timestamp) in het divelement plaatst. Dit gebeurd ook, echter lijkt hij de responseText te cachen want hoe vaak ik de functie ook aanroep, de timestamp blijft hetzelfde (het resultaat is dus dat mijn divelement constant gevuld wordt met de timestamp die hij bij de eerste call teruggaf).

Misschien zie ik het verkeerd en roep ik de functies verkeerd aan, of moet ik misschien zelfs eerst een nieuw request object aanmaken voordat hij het PHP-bestand opnieuw laadt? Of is dit toch een cache probleem?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

En wat is hier dan het serverside probleem? ;)

Je hebt een probleem met je JS code of met je cache, niet met je PHP-code, want dat is immers maar een echo, dat zeg je zelf.

PW>>WG

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

anders kan je bijv aanroepen met een random string erachter
dus bij
dataverkrijgen.php?blaat=21312

waarbij 21312 een random getal is.

Multimonitor is relax :P


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Het helpt waarschijnlijk wel om bij elk verzoek een willekeurige string achter dataverkrijgen.php te plakken (javascript time kun je daar goed voor gebruiken). Bijvoorbeeld:
code:
1
dataverkrijgen.php?83472937492

Het zou ook op te lossen moeten zijn door de goede headers mee te sturen in je PHP file. Verder snap ik niet echt wat je wilt bereiken door steeds de server tijd op te halen. Als je toch al met javascript werkt, haal dan de tijd 1 keer op en laat hem via javascript verder lopen, scheelt je weer een hoop server verzoeken.

If I can't fix it, it ain't broken.


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 27-04 10:06

Pelle

🚴‍♂️

Je weet dat je met het JS Date object ook de tijd in een div kunt gooien? ;)

Als je zeker wilt zijn dat het zooitje niet cached, dan gooi je er toch gewoon een random querystring achter?

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 27-04 10:06

Pelle

🚴‍♂️

Hmm..

* Pelle slaat MelsTwisted en Borizz :P

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

En als je in je PHP de goede headers meegeeft, zodat hij niet cached?

Bijvoorbeeld:
PHP:
1
2
3
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Pragma: no-cache");
Pelle schreef op vrijdag 28 oktober 2005 @ 11:33:
Je weet dat je met het JS Date object ook de tijd in een div kunt gooien? ;)

Als je zeker wilt zijn dat het zooitje niet cached, dan gooi je er toch gewoon een random querystring achter?
Ik denk dat hij het wel weet, maar dat die datum/tijd gewoon een test is om te kijken of hij niet cached. Ik zou anders ook gewoon de datum/tijd met Javascript in het divje zetten.

[ Voor 112% gewijzigd door eghie op 28-10-2005 11:49 ]


Verwijderd

Topicstarter
Pelle schreef op vrijdag 28 oktober 2005 @ 11:33:
Je weet dat je met het JS Date object ook de tijd in een div kunt gooien? ;)
Klopt, dank u ;) , Het is een testje :) (maar volgens Ivy had Pelle dat stiekem al door).
Als je zeker wilt zijn dat het zooitje niet cached, dan gooi je er toch gewoon een random querystring achter?
Ik had al geprobeerd om dat te doen, en wel op de volgende manier;

code:
1
http.open('get', 'dataverkrijgen.php?<?= time() ?>');


...todat ik zojuist, ná het openen van dit topic, besef had dat dit serverside toegestuurd wordt en dat het dus alsnog een statische waarde is aan de clientside. Goed bezig, Ivy. Kortom, met het date object en de getTime() functie heb ik het nu wel voor elkaar. Inderdaad een random string achter de filename zetten en het werkt!

/me kruipt voorzichtig terug achter zijn bureautje met het schaamrood op de kaken

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

* crisp wijst naar eghie: gewoon serverside regelen dmv no-cache headers.

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op vrijdag 28 oktober 2005 @ 11:54:
* crisp wijst naar eghie: gewoon serverside regelen dmv no-cache headers.
Voor de liefhebber, heb het zojuist even getest en ook dit werkt inderdaad :Y)

[ Voor 9% gewijzigd door Verwijderd op 28-10-2005 12:28 ]

Pagina: 1