Don P: Firefox 5 AJAX tut nicht

Beitrag lesen

Hallo,

Meine AJAX-Abfrage, die mit den Feuerfüchsen bis jetzt anstandslos funktioniert, klappt nicht mehr im FireFox 5 (Beta?): Mit Status 4 (DONE) des Request-Objekts wird der HTTP-Statuscode 0 zurückgegeben, was auf einen Fehler hindeutet.

Aber wieso? Intensives Googeln hat leider nicht geholfen. Kennt jemand das Phänomen? Muss man AJAX-Requests neuerdings irgendwie anders machen? Mein Code geht so:

  
var ax = { // ajax functions  
  
    reqObj: new XMLHttpRequest(),  
  
    request: function(url, responseFunction) {  
  
        try{ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } // enable cross-domain AJAX request  
        catch(e) {return ax[responseFunction]( null, {readyState:4, status:0, responseText:"\nCross-Domain AJAX Anfragen sind nicht erlaubt."} );}  
  
        var ro = ax.reqObj;  
        ro.open("GET", url, true);  
        ro.onreadystatechange = ax[responseFunction];  
        ro.send(null);  
  
        return undefined; // prevents strict warning  
    },  
  
    permResponse: function(e,ro) {  
  
        var ajaxErrorText = 'Unbekannter AJAX-Fehler! ',  
            noTRNGtext = '\nEchte Zufallszahlen sind nicht verfügbar.',  
            prngText = '\nErsatzweise werden Pseudo-Zufallszahlen benutzt.',  
            responseText = 'Antwort von random.org:\n',  
            httpStatusText = '\nHTTP status: ';  
  
        ro = ro||ax.reqObj;  
  
        if (ro.readyState === 4) { // DONE state  
  
            switch (ro.status) { // HTTP status code  
  
                case 0: alert((ro.responseText?ro.responseText:ajaxErrorText)+ noTRNGtext + prngText); break;  
  
                case 200:  
  
                    (tbl.p0 = ro.responseText.split('\n')).pop();  
                    tbl.p0.rng='TRNG'; if (tbl.sim.running) {tbl.dispatchEvent('onSimStart'); return; }  
  
                default:  
  
                    alert(noTRNGtext + (ro.responseText ? responseText+ro.responseText : httpStatusText+ro.status+' '+ro.statusText) + prngText);  
            }  
  
            if (tbl.sim.running) { tbl.sim.TRNG=false; ef.fire('NoTRNG'); tbl.dispatchEvent('onSimStart'); }  
        }  
    },  
  
    getPerms: function(count){  
  
        // http://www.random.org/integers/?num=10000&min=0&max=36&col=1&base=10&format=plain&rnd=new  
        return ax.request( encodeURI('http://www.random.org/integers/?num='+count+'&min=0&max=36&col=1&base=10&format=plain&rnd=new'), 'permResponse' );  
        //return ax.request( 'http://www.random.org/integers/?num='+count+'&min=0&max=36&col=1&base=10&format=plain&rnd=new', 'permResponse' );  
  
    }  
};  

Zur Erklärung:
ax ist ist mein Container für AJAX-Funktionen.
Durch Aufruf der Methode ax.getPerms(count) soll eine Anzahl (count) echter Zufallszahlen von random.org geladen werden.
tbl.p0 ist ein Array, worin die Zahlen dann landen.
Mit tbl.dispatchEvent('onSimStart') wird schließlich die Verarbeitung der Zufallszahlen gestartet.

Wie gesagt klappt es einwandfrei bis einschließlich FireFox 4. Cross-Domain-AJAX funktioniert halt nur, wenn die aufrufende Seite ein lokaler file://-URI ist und nachdem man die obligatorische Sicherheitsabfrage von FireFox entsprechend bentwortet hat.

Vielleicht ist es nur ein bis jetzt undokumentierter Bug in Firefox 5. Aber falls ich etwas Wichtiges übersehen habe, frage ich hier lieber mal nach.

Hat jemand eine Idee, was da los sein könnte, oder was man besser machen könnte?

Danke, Don P