• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

AJAX-Code geht im Firefox 2.x sonst nicht

Status
Für weitere Antworten geschlossen.

Frank85

Neues Mitglied
Hallo zusammen,

ich hab ein Problem mit AJAX, wenn ich den nachfolgenden Code ausführe, geht das im Firefox 2.x problemlos - allerdings gibt es in allen anderen Browsern Probleme:
Firefox 3.x zeigt gar nichts an, im Internet Explorer geht es auch nicht.

Vielleicht kann sich jemand mal den Code anschauen und mir vielleicht weiterhelfen:
HTML:
function test(day){
                var request;
            var params;
        var xmlHttp = null;
        try{
            xmlHttp=new XMLHttpRequest();
        }
        catch (e){
            try{
                xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e){
                try{
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (e){
                    alert("Your browser does not support AJAX!");
                    return false;
                }
            }
        }
        if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        if (xmlHttp != null) {
            params = "day="+day; 
            xmlHttp.open("POST", "./test.php", false);
            xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlHttp.setRequestHeader("Content-length", params.length);
            xmlHttp.setRequestHeader("Connection", "close");
            xmlHttp.onreadystatechange = function(){
            if (xmlHttp.readyState == 4) {
                if (xmlHttp.status == 200) {
                    if(xmlHttp.responseText != false)
                       request = xmlHttp.responseText;    
                } else {
                    //Hier geht er im Konqueror schonmal rein
                    request = 'Bei dem Request ist ein Problem aufgetreten.';
                }
            }
             }
                     xmlHttp.send(params);
             }    
         return request;
}
Hat jemand eine Idee, woran es liegen könnte?

Für Hilfe bin ich immer dankbar.

Grüße
Frank
 
Werden denn irgendwelche Fehler geworfen? Seit Firefox 2 hat sich an XHR nichts geändert.

Warum wird denn einmal das Request-Objekt zweimal erzeugt? Lass mal das try...catch weg, dass ist für diese Aufgabe eh ungeeignet.
 
Also die AJAX Funktion, soll in allen Browsern funktionieren, deswegen brauche ich doch das Try-Catch oder?

Falls ich deinen Vorschlag falsch verstanden haben sollte, dann lösch einfach meine falschen Code-Zeilen und schreib mir bitte was du meinst.

Grüße
Frank
 
Jetzt seh' ich erstmal, dass du dort einen synchronen Request absetzt. Soll das so sein? Sowas sollte man in jedem Fall vermeiden. Überhaupt ist deine Funktion ziemlich hardcoded.

Ich benutze einfach mal meine Funktion: MoesTaverne.com - NoPaste

Code:
function send (day) {
    xhr("GET", "/test.php", "day=" + day, auswerten, []);
}
function auswerten (req) {
    document.getElementById("foobar").innerHTML = req.responseText.
}
 
Und wofür brauche ich theoretisch dann die parameter als 5. übergabeparameter? Oder was bedeuten die [] wirklich?
Und was macht die Funktion apply - ich hab davon bisher noch nicht gehört?

Und bei meinem Problem ist es so, dass ich halt gerne eine Funktion aufrufen will und danach gerne in der Funktion weiterarbeiten möchte, also:
Aufruf Funktion1 (){
Vorbereiten der Anfrage
Anfrage via AJAX für Daten (hier könnte ich ja deine Funktion nutzen, allerdings würde ich halt gerne an der selben Stelle weiterarbeiten, oder gibt es eine bessere Lösung?)
Nach erhalt der Daten, dann Ausgabe in HTML
}


Grüße
Frank
 
Zuletzt bearbeitet:
Ja, asynchrone Request halt, denn dafür steht das A in AJAX. Synchrone Request blockieren meistens den ganzen Browser oder immerhin einen Tab, bis der Request wirklich abgearbeitet ist. Das sollte man vermeiden.

Ich selber habe noch nie einen Bedarf für einen synchronen Request gehabt, ich sehe dort auch keinen Sinn drin (für Web-Content).

apply() ist eine wichtige Funktion die man kennen sollte. Mit dem fünften Parameter in xhr() kann man Parameter durchreichen. Braucht man nicht unbedingt, wenn man mit Function.prototype.bind() arbeitet.
 
Ich wollte das ja auch nur aus reinem Intresse wissen, da ich ja nicht dumm sterben wollte.
Wenn ich etwas benutze, dann will ich auch wissen, was ich damit kann.

Grüße
Frank
 
bind() bindet eine Funktion an ein Objekt und reicht Parameter weiter. Die Funktion ist so verbreitet, dass sie in ECMAScript 4 Standard ist.

Beispiele:
Code:
//sollte die Hintergrundfarbe eines Elements tooglen
addEvent(
    document.getElementById("click_here"),
    "click",
    (function (style, before, after, event) {
        var cstyle = this.style;
        if (cstyle[style] == after) cstyle[style] = before;
        else cstyle[style] = after;
    }).bind(document.getElementById("aender_hier"), "backgroundColor", "red", "blue")
);
Code:
// Objekt-orientiert arbeiten macht damit Spaß:
function Test () {}
Test.prototype._defaultText = "foobar"

Test.prototype.alert = function (text) {
    window.alert(text || this._defaultText)
}
Test.prototype.invokeAlert = function (text) {
    setTimeout(this.alert.bind(this, text), 10000); // zehn Sekunden später [i]this[/i] ist die Test-Instanz, statt window
}
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben