script läuft im IE nicht.

heyho, hab folgendes script was in firefox und opera einwandfrei läuft. allerdings macht das im IE blödsinn und schreibt da gar nicht aktuelle werte rein.
jemand ne idee, woran das liegen könnte?

Code:
function req(url,div_name,method,post){

    if (!document.getElementById(div_name)) {
        return 0;
    }

    try {
        // Firefox, Opera 8.0+, Safari
        var xmlHttp1=new XMLHttpRequest();
    } catch (e){
        // Internet Explorer
        try {
            xmlHttp1=new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e){
            try {
                xmlHttp1 = new ActiveXObject("Microsoft.XMLHTTP");
            }catch (e){
                alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }
    
    
    xmlHttp1.onreadystatechange = function(){
        
        if(xmlHttp1.readyState==4){
            var content = xmlHttp1.responseText;
            document.getElementById(div_name).innerHTML = content;
        }
    }
    
    xmlHttp1.open(method,url,true);
    xmlHttp1.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlHttp1.send(post);
    
}

function sendShout(e) {
    if (e.keyCode != 13) {
        return false;
    }
    
    if (!document.getElementById("username")) {
        return 0;
    }
    
    var msg = document.getElementById("shoutinput").value;
    var user = document.getElementById("username").value;
    document.getElementById("shoutinput").value = '';
    
    var post = "user=" +user+"&text=" + Base64.encode(msg);

    req("/include/shoutbox.php?ajax=1","shouttext","POST",post);
}

function initbox() {
    var url = "/include/shoutbox.php";
    
    req(url,"shouttext","GET",null);
    s=setTimeout("initbox()",10000);
}

function timer() {
    
        
    if (!document.getElementById("resetbox")) {
        return 0;
    }

    
    req("/include/gettime.php","resetbox","get",null);
    t=setTimeout("timer()",1000);
}

var s=setTimeout("initbox()",500);
var t=setTimeout("timer()",1000);

das eigentlich problem bezieht sich auf timer();

getestet mit dem IE 7 unter Vista x64, ff und opera machen keine probleme und erzählen auch nichts von problemen.

link zur seite ums live zu sehen wäre das hier: http://do-not-press-this-button.verfriemelt.org/

ich formuliers nochmal deutlicher:
wenn ich zb in den shoutbox kasten was eingebe, sendet der die daten an den server und fragt per ajax request den server nach neuen inhalten ab.
wenn dann aber der timer wieder aktiv wird stehen wieder die alten daten drin. allerdings weis ich nicht warum.
als ob der IE das aus dem cache auslesen würde!
 
Original von easteregg
wenn dann aber der timer wieder aktiv wird stehen wieder die alten daten drin. allerdings weis ich nicht warum.
als ob der IE das aus dem cache auslesen würde!
Ohne das jetzt en detail untersucht zu haben: genau das kann passieren. Wenn du 2 gleichlautende Requests über den IE absetzt, dann kann es sein, dass das Ergebnis des zweiten aus dem Cache kommt. Das kannst du verhindern, indem du einfach an jeden Request noch einen Timestamp als Parameter anhängst (den musst du ja nirgends auswerten).
 
LX hat ganz Recht. Das Ergebnis der Requests kommt laut Debugbar definitiv aus dem Cache:

Request start time: Tue, 02 Dec 2008 23:35:40 All request retrieved from cache (no server request)​

Zu deiner Implementierung mal ein genereller Hinweis:

Ich würde es vermeiden der Server mit sovielen unnötigen Requests zu bombadieren. Du kannst den Timer auch in Javascript weiterzählen lassen, und die Serverzeit nur alle ein paar Sekunden (also nicht jede Sekunde!) abgleichen... Spart ne Menge nutzloser Requests :P
 
danke für die links erstmal, aber ich hab auf den seiten gar nichts weiter zu dem caching verhalten da gefunden.
welchen timestamp meint ihr genau?
den von dem dokument was ich abrufe? denn das wird ja mit php generiert, sprich das sollte doch eigentlich gar nicht gecached werden?
soll ich da jetzt extra nochmal den aktuellen zeitpunkt in den headerdaten manuell setzen?

ps: zum thema server bombadieren, das stimmt, an sich nen sehr schlechter stil.
allerdings hatte ich das js zeug bis jetzt nur schnell zusammengefrickelt, damit es überhaupt läuft. vorher sah das noch schlimmer aus, die server entlastung steht ganz oben mit auf meiner todoliste ;) derzeit sinds bei weitem auch nicht so viele nutzer, als dass das derzeit ins gewicht fällt. das wird aber noch optimiert :)
 
Ich meinte damit, einen Dummy-Parameter an jeden Request anzuhängen.

/blubb.php?foo=1&bar=2&timest=432434587

ist was anderes als

/blubb.php?foo=1&bar=2&timest=573423746

auch wenn die für dich interessanten Parameter (hier mal beispielsweise foo und bar) alle gleich geblieben sind. 2 verschiedene URLs bedeutet für den Browser, dass er da nix aus dem Cache holen kann, denn dass timest für dich überhaupt keine Rolle spielt, kann ja der IE net wissen ;)
 
achso, jetzt versteh ichs!
allerdings würd mich ja mal interessieren, warum der IE das überhaupt aus dem cache holt, eigentlich ja nicht ganz nachvollziehbar!
danke. ich werds gleich mal einbauen :)

edit: super, funktioniert einwandfrei! :)
vielen dank!
 
Zurück
Oben