Ajax offline ausführen
rohrspecht
- javascript
0 Felix Riesterer0 rohrspecht0 rohrspecht0 Felix Riesterer4 ChrisB0 molily
0 Struppi1 molily
Hallo zusammen,
ich habe ein Problem. Ich habe ein Offline-Javascript-Projekt. Klingt doof, ist aber so. Dabei möchte ich gerne offline eine XML-Datei per Javascript einlesen und dann dort weiterverarbeiten. Das habe ich mit Ajax probiert. Firefox macht alles ohne Probleme. Der Internet Explorer meldet bei meiner xmlrequest . open - Funktion ein "Access denied".
Gibt es irgendwie eine Möglichkeit, dies zu umgehen?
Ich benutze folgenden Javascript
function ajaxRequest(url, method, handle, data)
{
this.req = null;
this.url = url;
this.method = method;
this.handle = handle;
this.data = data;
this.sendRequest = function()
{
var self = this;
try {
this.req = new XMLHttpRequest();
}
catch (e) {
try {
this.req = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
this.req = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (failed) {
this.req = null;
}
}
}
if (this.req == null) {
alert("Error creating request object!");
}
this.req.open(this.method, this.url, true);
this.req.onreadystatechange = function()
{
switch(self.req.readyState) {
case 4:
self.handle(self.req);
break;
default:
return false;
break;
}
}
this.req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
this.req.send(this.data);
}
}
und rufe die Funktion dann später so auf:
function startUp(req)
{
xmlDoc = req.responseXML;
// Mache irgendwas lustiges mit dem erhaltenen XML ...
}
window.onload = function() {
var ajaxReq = new ajaxRequest("xml/inkconsumption.xml","GET",startUp,null);
ajaxReq.sendRequest();
};
Also wie gesagt, ich möchte offline eine XML-Datei in Javascript weiterbehandeln.
Vielen Dank im Voraus,
rohrspecht
Lieber rohrspecht,
was heißt "offline" genau? Läuft bei Dir ein lokaler Webserver, oder rufst Du HTML-Dokumente über das file-Protokoll auf?
Im ersteren Falle sollte der IE kein Problem haben (abgesehen vielleicht von Deinen serverseitigen Scripten), aber im letzteren Falle weiß ich nicht, ob das "mark of the web" (danach googlen!) weiterhilft...
Liebe Grüße,
Felix Riesterer.
Hallo Felix,
danke für die rasche Antwort.
was heißt "offline" genau? Läuft bei Dir ein lokaler Webserver, oder rufst Du HTML-Dokumente über das file-Protokoll auf?
Letzteres :)
Im ersteren Falle sollte der IE kein Problem haben (abgesehen vielleicht von Deinen serverseitigen Scripten), aber im letzteren Falle weiß ich nicht, ob das "mark of the web" (danach googlen!) weiterhilft...
Danke für den Tipp. Ich habe sowohl den Kommentar
<!-- saved from url=(0013)about:internet -->
in meine HTML-Dateien eingefügt als auch unter Extras - Internetoptionen - Registerkarte Erweitert - Abschnitt Sicherheit "Ausführung aktiver Inhalte in Dateien auf dem lokalen Computer zulassen" markiert.
Leider wird mir immer noch der Fehler "Access denied" in der Zeile meines Javascripts gemeldet, in der ich
this.req.open(this.method, this.url, true);
ausführe.
Hat sonst niemand eine Idee? Das Skript funktioniert in allen Browsern übrigens einwandfrei, wenn es auf einem Webserver liegt.
Leider _muss_ es eben auch offline funktionieren.
Lieber rohrspecht,
die ganze Idee des XmlHttpRequest basiert auf einer Client-Server-Kommunikation über das HTTP-Protokoll. Deine "lokale" Umgebung basiert auf dem file-Protokoll (quasi "Browser an Festplatte"). Ergo ist da nix mit Ajax, da es für Ajax eine echte Server-Antwort erfordert. Bitte sieh' es ein!
Liebe Grüße,
Felix Riesterer.
Hi,
Hat sonst niemand eine Idee?
*Suchen* vielleicht?
Google liefert mir bspw. http://www.webdeveloper.com/forum/showpost.php?p=749574&postcount=10
"While your page is ran locally via the file:// protocol, IE7's native XMLHttpRequest is powerless even to a file in the same directory, yet, in the same situation, ActiveX would be able to serve IE7 normally.
The reason is because IE7's XMLHttpRequest object is limited to the web."
MfG ChrisB
Hat sonst niemand eine Idee? Das Skript funktioniert in allen Browsern übrigens einwandfrei, wenn es auf einem Webserver liegt.
Leider _muss_ es eben auch offline funktionieren.
Da es mit AJAX anscheinend nicht geht, könntest du es auch mit einem iframe versuchen, zumindest im IE 6 kannst du auf das geladene Dokument zugreifen, allerdings kenn ich mich nicht mit xml Dokumenten aus und weiß auch nicht was du machen willst, aber vielleicht funktioniert ja der Ansatz für dein vorhaben.
Struppi.
Ergänzung zum Thema lokales XML laden im IE ohne XMLHttpRequest:
http://dean.edwards.name/weblog/2006/04/easy-xml/
http://www.w3schools.com/Dom/dom_loadxmldoc.asp
http://www.quirksmode.org/dom/importxml.html
Mathias