Ajax: Problem mit onreadystatechange bei netscape 6
steckl
- javascript
Hi,
Ich habe folgendes Javascript:
var http_request = null;
function getFileContent(file)
{
/* creates a new XMLHTTP request */
http_request = new createXMLHttpRequest();
document.getElementById("contentDiv").innerHTML = "<img src='/knowhow/testDir/IMG/sanduhr.gif' />";
/* executes the XMLHTTP request */
try
{
http_request.open("GET", file, true);
}
catch (e)
{
document.getElementById("contentDiv").innerHTML = "Ladefehler";
return false;
}
http_request.onreadystatechange = alertInhalt;
http_request.send(null);
}
function createXMLHttpRequest()
{
try{ return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
try{ return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
try{ return new XMLHttpRequest(); } catch(e) {}
alert("XMLHttpRequest not supported");
return null;
}
function alertInhalt()
{
alert('test');
if (http_request.readyState == 4)
{
if (http_request.status == 200)
{
var requestText = http_request.responseText;
document.getElementById("contentDiv").innerHTML = requestText;
}
else
{
document.getElementById("contentDiv").innerHTML = "Error";
}
}
}
Der Aufruf erfolg mit:
<button type="button" onclick="getFileContent('./ajaxTest.pl?CALLMODE=1')">Klick me!!!</button>
Im FF1.5 und IE6 klappt auch alles wie erwartet (im contentDiv wird die Ausgabe von ajaxTest.pl angezeigt.
Nur im Netscape6 wird die Funktion alertInhalt nie aufgerufen.
Die Javascript-Fehlerkonsole enthaelt keine Meldungen und das Skript ajaxTest.pl wird auch aufgerufen (habe ich mit einer Test-ausgabe in ein File ueberprueft).
Hat jemand eine Erklaerung fuer dieses Verhalten? Und gibt es einen Workaround?
mfG,
steckl
http_request.onreadystatechange = alertInhalt;
schreib die Zeile mal vor http_request.open(...)
Struppi.
Moin!
http_request.onreadystatechange = alertInhalt;
schreib die Zeile mal vor http_request.open(...)
Was ja auch logisch ist. open() startet den Request - und dem laufenden Request (der ja schon innerhalb einer Mikrosekunde fertig sein kann) hinterher dann noch Informationen über die aufzurufenden Javascript-Funktionen mitzugeben ist die falsche Reihenfolge.
open() sollte wirklich erst dann aufgerufen werden, wenn alle Einstellungen, die zum Request gehören, erledigt sind - also ganz am Schluß.
- Sven Rautenberg
Hi,
http_request.onreadystatechange = alertInhalt;
schreib die Zeile mal vor http_request.open(...)
Was ja auch logisch ist. open() startet den Request - und dem laufenden Request (der ja schon innerhalb einer Mikrosekunde fertig sein kann) hinterher dann noch Informationen über die aufzurufenden Javascript-Funktionen mitzugeben ist die falsche Reihenfolge.
Klingt einleuchtend, klappt aber immer noch nicht.
Ausserdem habe ich in ajaxTest.pl ein "sleep 5", das die Antowrt eh lange hinauszoegert.
open() sollte wirklich erst dann aufgerufen werden, wenn alle Einstellungen, die zum Request gehören, erledigt sind - also ganz am Schluß.
Aber schon vor send(null), oder?
Habe es jetzt so gemacht:
function getFileContent(file)
{
/* creates a new XMLHTTP request */
http_request = new createXMLHttpRequest();
document.getElementById("contentDiv").innerHTML = "<img src='/knowhow/testDir/IMG/sanduhr.gif' />";
/* executes the XMLHTTP request */
try
{
http_request.onreadystatechange = alertInhalt;
http_request.open("GET", file, true);
}
catch (e)
{
document.getElementById("contentDiv").innerHTML = "Ladefehler";
return false;
}
http_request.send(null);
}
mfG,
steckl
Hi,
vielleicht ist es noch interessant, dass ich Netscape 6.1 unter Solaris benutze:
Netscape 6.1
Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.2) Gecko/20011002 Netscape6/6.1
mfG,
steckl
Hi,
vielleicht ist es noch interessant, dass ich Netscape 6.1 unter Solaris benutze:
Netscape 6.1
Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.2) Gecko/20011002 Netscape6/6.1
Nur mal so am Rande gefragt: hat es einen Grund, daß Du so einen uralten Browser benutzt?
Wie man an der Revision-Nummer 0.9.2 sieht, waren die 6er Netscapes ein verfrühter Schnellschuß von Netscape ...
Ich vermute mal, daß Dein Problem damit zusammenhängt - Gecko war damals einfach noch nicht fertig, als Netscape meinte, den 6er bzw. den 6.1er rausbringen zu müssen.
Aktuelle Geckos haben eine Revision-Nummer, die fast doppelt so hoch ist (1.8.1.3) und sind fast 6 Jahre (20070309 vs 20011002) neuer.
Und von Netscape gibt es immerhin schon eine Version 8.1.3.
cu,
Andreas
Hi,
Nur mal so am Rande gefragt: hat es einen Grund, daß Du so einen uralten Browser benutzt?
Ich benutzt ihn ja normal net, war nur zu Testzwecken.
Wollte das ganze relativ barrierefrei machen und das heißt wenn ich das richtig verstehe u.a., dass meine Seite mit möglichst vielen Browsern funktionieren sollte und auch wenn JS ausgeschaltet ist.
Es funktioniert sogar mit dem Netscape4, hier wird das Formular dann eben nicht per Ajax abgeschickt, sondern normal.
Der Netscape6 war bis jetzt der einzige Browser, bei dem es nicht geklappt hat, bzw nicht angezeigt wurde, dass es geklappt hat.
Aber wenn sich keine andere Lösung findet muss ich wohl ne extra Browserweiche für den 6er Netscape einbauen.
mfG,
steckl
Hi,
Der Netscape6 war bis jetzt der einzige Browser, bei dem es nicht geklappt hat,
Der Netscape 6 ist bis jetzt ja auch der einzige Browser, der in allen möglichen Bereichen verbuggt ist.
Wenn das der Nutzer noch nicht mitbekommen haben sollte (kaum zu glauben) und ihn trotzdem verwendet, dann ist ihm IMHO auch nicht mehr zu helfen ...
Aber wenn sich keine andere Lösung findet muss ich wohl ne extra Browserweiche für den 6er Netscape einbauen.
Allerdings sollte dir bewußt sein, daß es noch x^n Browser gibt, die ebenfalls noch schwerwiegende Bugs aufweisen. Jeden Bug in diesen Uralt-Browsern zu finden und zu umgehen, dürfte sich letztlich als Sisyphus-Arbeit erweisen. Aber daß Du nun in einem dieser Uralt-Browser einen Bug gefunden hast und ihn umgehen willst, ehrt dich natürlich ...
... ich würde mur diesen Aufwand wohl ersparen ...
Gruß, Cybaer