Caching im IE 7 & Firefox - Problem mit Ajax & Grafiken

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Caching im IE 7 & Firefox - Problem mit Ajax & Grafiken

    Servus Forum!

    ich generiere via Request grafische Statistiken und füge diese dynamisch ein.

    Leider wird immer nur die zuletzt generierte Grafik im Internet Explorer 7 und im Firefox angezeigt (Caching on).

    Ich habe schon diverse "Tricks" ausprobiert, z.B. Cache-Control, timestamps oder beim Generieren der Grafiken randomisierte Zahlen als Namen zu vergeben, aber immer wird nur die zuletzt generierte Grafik geladen.

    Gibt es da irgendwas bestimmtes zu beachten, wenn man mit Ajax und Browser-Caches arbeitet? Die Standard-Einstellungen der Browser kann ich leider nicht verändern, das muss so bleiben...

    Via Ajax eingefügte Texte funktionieren übrigens problemlos...

    Hier ein wenig Code! Der Request:

    Quellcode

    1. if (window.XMLHttpRequest) {
    2. req = new XMLHttpRequest();
    3. req.onreadystatechange = budReqChange;
    4. req.open('get', 'stat_budget.php?campaignId='+ digit);
    5. req.send(null);
    6. } else if (window.ActiveXObject) {
    7. reqOpt3 = new ActiveXObject("Microsoft.XMLHTTP");
    8. if (reqOpt3) {
    9. reqOpt3.open("GET", 'stat_budget.php?campaignId=' + digit, true);
    10. reqOpt3.onreadystatechange = buttonReqChange;
    11. reqOpt3.send(null);
    12. }
    13. }
    Alles anzeigen


    Die Funktion, die die Grafik einfügt:

    PHP-Quellcode

    1. function budReqChange() {
    2. if (req.readyState == 4) {
    3. if (req.status == 200) {
    4. <?php
    5. if (isset($_COOKIE["stat"])) {
    6. $rand = "".$_COOKIE["stat"]."";
    7. }
    8. echo "document.getElementById('requrivalue').innerHTML = \"<img src=stats/pics/stat".$rand.".png>\";";
    9. ?>
    10. }
    11. }
    12. }
    Alles anzeigen


    Danke für Eure Ideen!
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...
  • Quellcode

    1. wo verwendest du denn die Rückgabe? responseText bzw responseXML ?
    2. Zur Zeit greifst du nirgends auf die AJAX Rückgabe zurück.


    Stimmt, verwende ich nicht. Wie würde es dann aussehen?

    Quellcode

    1. if (responseText == ????) ...


    Danke und viele Grüße aus dem Westen der Republik!
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...
  • Sorry, donut, aber ich verstehe das nicht genau. Habe jetzt bestimmt ne Stunde gewürfelt. Bitte poste Deinen Code mal im Zusammenhang.

    Wo gebe ich meinen Bild-Pfad genau an? Bzw. wo setze ich die Rückgabe mit ResponseText genau hin?

    Momementan sieht es so bei mir aus:

    PHP-Quellcode

    1. function budReqChange() {
    2. if (req.readyState == 4) {
    3. if (req.status == 200) {
    4. <?php
    5. if (isset($_COOKIE["stat"])) {
    6. $rand = "".$_COOKIE["stat"]."";
    7. }
    8. echo "document.getElementById('".$rand."').innerHTML = \"<img src=stats/pics/stat".$rand.".png>\";";
    9. ?>
    10. scroll(0,0);
    11. }
    12. }
    13. }
    Alles anzeigen


    Und halt im Dokument:

    PHP-Quellcode

    1. <div id="<?php echo $rand ?>"></div>


    Das verändert aber nichts, weil ich nicht genau weiss, wo auf die Rückgabe gewartet werden soll?

    Vielen Dank!
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von xound ()

  • Ich kann nur raten, was deine Funktion macht. Was liefert denn der HTTP Request?
    Ist die Rückgabe ein Teil des neuen Dateinamens? Willst du das erreichen?

    Quellcode

    1. function budReqChange() {
    2. if (req.readyState == 4 && req.status == 200) {
    3. document.getElementById('requrivalue').innerHTML = "<img src=stats/pics/stat"+req.responseText+".png>";
    4. }
    5. }
  • d0nut schrieb:

    Ich kann nur raten, was deine Funktion macht. Was liefert denn der HTTP Request?
    Ist die Rückgabe ein Teil des neuen Dateinamens? Willst du das erreichen?


    Das habe ich im Eingangsposting versucht zu erklären. Es wird eine dynamische Grafik mit dem HTTPRequest generiert. Diese wird mit einer randomisierten Zahl im Dateinamen in einem bestimmten Ordner auf dem Server abgelegt.

    Der Benutzer kann durch anklicken verschiedener Links verschiedene Grafiken erzeugen (möglich sind ca. 300 verschiedene Diagramme). Da aber natürlich mehrere Benutzer auf die Web-Applikation zugreifen, werden die erzeugten Grafiken mit Hilfe der randomisierten Zahlen als Cookies den jeweiligen Benutzern zugewiesen und so abgeglichen.

    Das Problem ist halt, dass die Grafiken über Ajax nicht aktualisiert werden bzw. nur, wenn man das Browser-Caching ausschaltet... und dafür gibt es ja die Response-Rückgabe, nur, wo man diese anwendet, weiss ich noch immer nicht genau ... ich hoffe, dass das einigermassen verständlich war ... danke!!!

    Schöne Grüße!!!
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von xound ()

  • d0nut schrieb:

    also Cookies sind dazu nicht notwendig. Wenn in der stat_budget.php?campaignId=' + digit
    statt einem setsookie('stat', 'wert'); ein echo 'wert'; steht, dann klappt der code so, wie ich ihn modifiziert habe.


    Theoretisch schon, praktisch geht's leider nicht, da stat_budget.php lediglich eine Grafik generiert und nicht in der Lage ist Text zurückzugeben!
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...
  • stat_budget.php generiert stats/pics/stat010100100101.png?
    dann kann sie doch gleichzeitig text zurückgeben.

    Wenn du also die ID als Text nicht brauchst, würde ich dir empfehlen, das ganze ohne AJAX zu machen und einfach stat_budget.php direkt als Bild einzubinden.
    Und beim klicken hängst du einen beliebigen Parameter hinten dran (einfach nur um das Cachen zu verhindern)

    fertiger Code:

    Quellcode

    1. <img src="ajax-loader.gif?1" onclick="this.src+=1" />
  • Das mit dem Text zurückgeben klappt gerade nicht, dahinter steck JPGraph, um die Diagramme zu erzeugen. Und das Script meckert. Ich kann in stat_budget.php cookies schreiben und die Grafik erzeugen. Texte zurückgeben wird mit einem Fehler geahndet. Und mit Ajax würde ich das schon gerne machen, da diese Bilder nur ein Element in der Seite ist, die komplett durch Ajax generiert wird.

    Vielleicht kann ich das noch anders machen, irgendwie muss es eine Möglichkeit geben, dass die Funktion darauf wartet, bis das Bild erzeugt ist, das gewünschte Bild lädt und nicht das alte aus dem Cache nimmt...

    Evtl. ne Warteschleife oder sowas?
    Um Rekursionen zu verstehen, muss man zuerst Rekursionen verstehen...