PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AJAX-Loops und verschiedene Browser



BlueJay
03-04-2007, 16:17
Hallo Leute,

Zum Versenden eines einzelnen AJAX-Requests gibt es ja genug Beispiele. Aber wenn man die Requests gelooped (Polling) absendet, so machen einige Browser der Mozilla-Riege ja erheblich Probleme:

Code:


function create_httprequest()
{ var req = null;
try { req = new ActiveXObject("MSXML2.XMLHTTP"); } // IE-Äh
catch (err_MSXML2)
{ try { req = new ActiveXObject("Microsoft.XMLHTTP"); } // Ie-Äh neu
catch (err_Microsoft)
{ if (typeof XMLHttpRequest != "undefined") req = new XMLHttpRequest; // Mozilla und Co
}
}
return req;
}

function ajax(req,proggi,qstring)
{
req.open("GET",proggi+'?'+qstring); // Request zusammenstellen
req.onreadystatechange=function()
{ if (req.readyState==4)
{ if (req.status==200) auswerten(req.responseText);
else alert('Fehler:'+req.status);
}
}
req.send(null);
}



// keep alive - updates einfordern
function ajaxloop()
{
// nach Notstart doppelte loop verhindern
if (timrec1) clearTimeout(timrec1);
blinken(6);
var jetzt = new Date();
t=jetzt.getTime();
req1=new create_httprequest();
req2=new create_httprequest();
ajax(req1,"prog1.php",'keep='+ich+','+t);
ajax(req2,"prog2.php",'keep=','+ich+','+t');
timrec1=setTimeout('ajaxloop()',timetic);
}


Dieser Code funktioniert in Konqueror, Opera und Firefox 2.0 unter Linux, auch IE6 unter Win2000 macht mit.

Mozilla 1.7 unter Win2000 ist aber bei einer Loop nicht zur Mitarbeit zu bewegen.

Probiert:
die Requests als POST laufen lassen:
funktionierte nur bei wenig Traffic, dann gingen die POST-Daten oft irgendwie verloren. Daher blieb es beim GET.

die Requests req, req1,req2 wurden als globale Variable erzeugt:
selbes Verhalten in allen Browsern: d.h. alle ausser Mozilla 1.7 taten, was sie sollten, ohne zu murren und Fehlermeldungen rauszuschmeissen. (obige Variante)

die Requests wurde als globale Requests definiert, jetzt tat auch der Mozilla ein wenig, aber FF und Mozilla flogen bald darauf auf die Nase, auch die anderen Browser stolperten bei etwas Netzbelastung.

Im FF2 zeigte sich dann ebenfalls der unten angegebene Fehler.

Fehler des Mozilla 1.7:

Error: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://www.gamecraft.de/_ajax1.js :: anonymous :: line 21" data: no]
Source File: http://www.gamecraft.de/_ajax1.js
Line: 21


Frage: war der Mozilla 1.7 einfach noch nicht so weit? Oder gibt es eine bessere Methode, AJAX-Anforderungen im Loop laufen zu lassen?

Noch nen URL zum testen:
http://www.gamecraft.de/ajax/othello/


so long,
Bluejay

BlueJay
03-04-2007, 18:04
Ok, Leute, ist Mozilla-Bug 311724