Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Ajax] content laadt niet bij no-cache

Pagina: 1
Acties:

  • rogierslag
  • Registratie: Maart 2005
  • Laatst online: 14-10-2024
Ik zit voor het eerst met een heerlijk merkwaardig probleem.

Op een pagina die ik ontwikkel wordt vrijwel alles via AJAX ingeladen om ze een desktop ervaring te creeren.

Om een of andere reden wil er nou een pagina niet laden nadat ik via een .htaccess heb geforceerd dat er niets gecached mag worden. De Apache HTTP header zijn
code:
1
2
3
Cache-Control:        private, pre-check=0, post-check=0, max-age=0 CRLF
Expires:              0
Pragma:               no-cache


Een voorbeeld van de situatie staat op http://intranet.abenslag.nl/bestanden/zandbak/ (gespreksadministratie, nieuw gesprek). Hier heb ik even twee opties neergezet, de normale en de debug. De normale geeft in IE6, Opera en Firefox een undefined op. De debug (wat gewoon wat extra alerts geeft met informatie) geeft echter in Firefox en IE gewoon goed resultaat, in Opera ook undefined.

Nu ben ik dus volledig de weg kwijt geraakt, want enkele alerts (en dus nergens declaratie of aanpassing van variabelen) schijnt de boel te repareren? Maar waarom niet in Opera?

Omdat ik meestal uitga van de grote heiligheid van Opera, IE niet vertrouw en vind dat Firefox op weg is maar niet meer dan dat, vermoed ik dat ik toch iets fout doe. Helaas heb ik geen idee wat. Als ik de .htaccess disable werkt het wel. De header die Apache dan stuurt is
code:
1
Cache-Control:  max-age=3600


Ik snap er dus niks meer van, en vraag hierbij nederig om hulp...

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:58

crisp

Devver

Pixelated

Je weet wat asynchroon inhoudt?

Intentionally left blank


  • rogierslag
  • Registratie: Maart 2005
  • Laatst online: 14-10-2024
yep, dat javascript gewoon verder gat met het uitvoeren van het script terwijl er eventueel gewacht wordt op het ophalen van content. Toch werkt de boel feilloos als ik een beetje speel met de headers (alleen heb ik dan headers die ik niet wil), de bestandsgrootte en dergelijke is hetzelfde en het werkt ook voor die headers. Ik snap gewoon niet wat ik moet aanpassen.

Ik kan er natuurlijk een geforceerde sleep inzetten, maar dat is natuurlijk niet echt handig

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:58

crisp

Devver

Pixelated

rogierslag schreef op donderdag 07 februari 2008 @ 22:23:
yep, dat javascript gewoon verder gat met het uitvoeren van het script terwijl er eventueel gewacht wordt op het ophalen van content. Toch werkt de boel feilloos als ik een beetje speel met de headers (alleen heb ik dan headers die ik niet wil), de bestandsgrootte en dergelijke is hetzelfde en het werkt ook voor die headers. Ik snap gewoon niet wat ik moet aanpassen.

Ik kan er natuurlijk een geforceerde sleep inzetten, maar dat is natuurlijk niet echt handig
Je snapt het wel maar ziet het gevolg dus niet. Ik zal de vraag verduidelijken: wat denk je dat er eerder wordt uitgevoerd, de return returnValue in MakeRequest() of de onreadystatechange handler?
En bedenk dan ook wat sneller is: data uit de browsercache halen, of data over de lijn moeten ophalen omdat er opgegeven is dat de data niet gecached mag worden.

Kortom: je hebt gewoon een timing issue omdat je een asynchroon request uitvoert maar er wel van uitgaat dat de data in de verdere executie meteen beschikbaar is ;)

Intentionally left blank


  • rogierslag
  • Registratie: Maart 2005
  • Laatst online: 14-10-2024
oke ik begin het nu te snappen

En door die alerts wordt de uitvoering opgehouden (er moet steeds geklikt worden voor de code verder gaat) waardoor bij de return de code wel beschikbaar is.

Hoe moet ik dus dit nou echter doen, code bewust vertragen of kan je ook zoiets scripten dat de wijziging van de functieinhoud onmiddelijk leidt tot een nieuwe returnvalue?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:58

crisp

Devver

Pixelated

ofwel maak je request synchroon (geen readystatechangehandler nodig, maar kent nog wel wat browser-issues), of vervang in je handler returnValue = httpRequest; door document.getElementById("content").innerHTML = httpRequest.responseText; en haal die zooi weg uit LoadPage()

Intentionally left blank

Pagina: 1