AJAX/SJAX - Warten bis XMLhttp-Request Antwort liefert
a5cl3p1o5
- javascript
2 Sven Rautenberg0 Matze
Hallo Forenaktive,
ich hoffe, ihr könnt mir helfen:
Ich habe vor, einen XMLhttp-Request absetzen und zuvor einen Preloader einzublenden und nach Erhalt der Antwort wieder auszublenden.
Mit folgendem Code setze ich einen SYNCHRONEN Request ab, d.h. der Programmcode soll bewusst warten bis eine Antwort geliefert wurde.
function getdatafunc(fileUrl) {
var req;
var fileContent;
// Firefox etc.
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.open("GET", fileUrl, false);
req.send(null);
fileContent = req.responseText;
}
// Internet Explorer
else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
req.open("GET", fileUrl, false);
req.onreadystatechange=function() {
if (req.readyState == 4) {
fileContent = req.responseText;
}
}
req.send(null);
}
return fileContent;
}
Von der Idee her, soll der Preloader angezeigt werden, die Daten geladen und anschließend der Preloader ausgeblendet werden:
document.getElementById('preloader').style.visibility = 'visible'; //Preloader anzeigen
data = eval(getdatafunc(fileUrl)); //SJAX-Request absetzen
document.getElementById('preloader').style.visibility = 'hidden'; //Preloader ausblenden
Im Firefox funktioniert dieser Ansatz. Im Internet Explorer wird der Request wie ein AJAX-Request behandelt und der Code weiter ausgeführt. Der Preloader wird daher sofort wieder ausgeblendet.
Hat jemand eine Idee, wie ich auch im Internet Explorer das gewünschte Ergebnis erziele?
Viele Dank im Voraus!
a5cl3p1o5
Moin!
Mit folgendem Code setze ich einen SYNCHRONEN Request ab, d.h. der Programmcode soll bewusst warten bis eine Antwort geliefert wurde.
Aber warum?
Gib dem AJAX eine Callback-Funktion mit, die nach dem abgearbeiten Request den Preloader ausblendet. Das ist die übliche Vorgehensweise für das Problem.
- Sven Rautenberg
Hallo a5c... ach ich sag einfach ScriptKiddy*
// Firefox etc. [..] // Internet Explorer [..] req.onreadystatechange=function() { [..]
Wieso fängst du das onreadystatechange-Event nur beim IE ab?
Eventuell interessiert dich ja besonders readyState
"1".
Ich vermisse auch die Abfrage des Request-Status.
Von der Idee her, soll der Preloader angezeigt werden, die Daten geladen und anschließend der Preloader ausgeblendet werden:
Keine schlechte Idee, fang readyState
entsprechend ab.
document.getElementById('preloader').style.visibility = 'visible'; //Preloader anzeigen
document.getElementById('preloader').style.visibility = 'hidden'; //Preloader ausblenden
Schöner wäre es, den Preloader per JS zu erstellen, ins DOM einzuhängen und abschließend wieder zu entfernen.
> Hat jemand eine Idee, wie ich auch im Internet Explorer das gewünschte Ergebnis erziele?
Ich bin mir nicht sicher ob ich dein Problem verstanden habe.
Was sagt denn die Fehlerkonsole?
Grüße, Matze
\* SCNR - der Name ist aber auch...