Das Problem mit Caching in AJAX-Requests

Während ich hier gerade massiv in die AJAX- und jQuery-Welt abtauche, stosse ich bei der gesteigerten Komplexität meiner Applikationen vermehrt auf kaum reproduzierbare Caching-Probleme. Besonders bei komplett interaktiven Elementen (mehrere AJAX-Elemente einer Webseite, die bei Aktion geändert oder gesteuert werden), ergeben sich zuweilen lustige Cache-Artefakte. Mit Firebug kommt man dem Problem, aber nicht der Ursache auf die Schliche. Auch der Indianer ist nach entsprechender Um-Konfiguration nicht in der Lage, diesen Makel aufzulösen. Seltsamerweise scheint der Browser/Client selbst zu entscheiden, wann er auf den Cache zugreift und wann nicht, auch wenn ich ihn explizit (nach allen Regeln der Kunst) anweise, das nicht zu tun.AJAX-BuchcoverDie Lösung ist denkbar einfach (“Doh”-einfach – das hätte ich selbst wissen können, hmpf). Der Mitautor eines meiner liebsten AJAX-Bücher weiss Rat: Bei der Abfrage an einen bestimmten AJAX-Handler wird einfach eine zufällig generierte Zahl als GET-Parameter angehangen. Update: Dirk weist darauf hin, das mein vormalig verwendetes Date() nicht zufällig genug ist, ich habe deshalb den Code noch einmal angepasst (Danke ;). Für jQuery kann das so aussehen:$('#pawn').load (    "ajax-myajaxhandler.php?d="+Math.random() * 100000,    {        param: "param"    },    function ()    {        reloadUI(elem1,elem2,elem3);    });Klappt prima :) Any comments?

Dieser Beitrag wurde unter Unsortiert abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

4 Antworten auf Das Problem mit Caching in AJAX-Requests

  1. Dirk Olbertz sagt:

    Date() ist nicht zufällig genug :-) Nimm besserMath.random() * 100000

  2. molily sagt:

    Wenn Date, dann eher new Date().getTime(), aber Math.random() ist wohl noch zuverlässiger (auch wenn ich Date für ausreichend halte – man wird wohl nicht in derselben Mikrosekunde dieselbe Ressource zweimal abrufen).

  3. Hasematzel sagt:

    Vielen Dank für das Feedback. Ich denke auch, Math.random() sollte ausreichen. Ich habe den Artikel noch einmal überarbeitet.

  4. Timo sagt:

    Vielen Dank – hat mein Problem gelöst! War allerdings bei mir nur im Opera, aber ich habe noch eine relativ einfache Ajax Seite.Timo

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>