pinki: XMLHttpRequest erzeugtes Objekt immer null

Hi,

so langsam bin ich echt frustriert, suche seit 2 Tagen das Internet nach ner Lösung ab, aber noch nichts gefunden.
Mein Problem:
Ich will mit Javascript eine XML-Datei auslesen und sie mittels DOM verarbeiten. Dazu nutze ich XMLHttpRequest, allerdings ist das erzeugte Objekt immer null. Da Ich den Code für eine Firefox Extension nutzen will, brauche ich keine Absicherung für den IE und arbeite nur lokal, sprich die js und die xml Datei liegen lokal im selben Ordner.
Die XML Datei ist valid.

  
function alertContents(httpRequest) {  
  try{  
    if (httpRequest.readyState == 4) {  
      var xmldoc = httpRequest.responseXML;  
      var root_node = xmldoc.getElementsByTagName('root').item(0);  
      alert(root_node.firstChild.data);  
    }  
  }catch(e){alert(e);}  
}  
function ToolCal_test(){  
  var file = "testfile.xml";  
  var http_request = null;  
  //keine Absicherung für IE nötig, weil Firefox Extension  
  http_request = new XMLHttpRequest();  
  http_request.overrideMimeType('text/xml');  
	  
  if (http_request) {  
    try {		  
      http_request.onreadystatechange =  
        function(){alertContents(http_request);};  
      http_request.open('GET', file, true);  
      http_request.send(null);  
    } catch(e) {alert(e);}  
  }  
}  

Wenn irgendjemand einen Hinweis geben kann woran es möglicherweise liegt, oder einen Link hat: ich würd mich echt freuen

  1. httpRequest.responseXML ist ja aber anscheinend nicht null.
    Wenn du den root-Knoten willst, kannst du diesen mit
    xmldoc.documentElement
    erhalten

    1. Hi, danke erstmal für die Antworten,

      httpRequest.responseXML ist ja aber anscheinend nicht null.

      Ich hab eben mittels if herausgefunden, dass es null ist.

      btw: ich habe versucht die xmldatei als String einzulesen und den allein zu parsen:

        
      var text = '<?xml version="1.0"?><root id="date01">Ich bin ein Testsatz.</root>';  
      var parser = new DOMParser();  
      var xmlDoc = parser.parseFromString(text,"text/xml");  
      alert(xmlDoc.getElementById("date01").firstChild.nodeValue);  
      
      

      Auch hier das Selbe: xmlDoc.getElementById("date01") is null

      help...

      1. Auch hier das Selbe: xmlDoc.getElementById("date01") is null

        getElementById ist ja auch kein Attribut von xmlDoc.

        Hotti

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. Auch hier das Selbe: xmlDoc.getElementById("date01") is null

          getElementById ist ja auch kein Attribut von xmlDoc.

          ähhm Methode ;-)

          siehe document...

          --
          Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
      2. httpRequest.responseXML ist ja aber anscheinend nicht null.

        Ich hab eben mittels if herausgefunden, dass es null ist.

        Gibt es denn Fehler?

        Auch hier das Selbe: xmlDoc.getElementById("date01") is null

        Vermutlich ein Bug, aber wie gesagt, das root-Element bekommst du auch einfacher.

        1. Also ich glaub ich steh grad vollkommen auf dem Schlauch:

          Von welchem Typ ist httpRequest.responseXML ?
          Ich dachte vom Typ document, aber dann müssten ja die normalen Methoden, z.B. getElementById funktionieren - tun sie aber nicht.

          Versuche ich mit httpRequest.responseXML.documentElement etwas anzustellen kommt die selbe Fehlermeldung wie sonst auch "httpRequest.responseXML is null"
          Wobei die Methode ja auch zu document gehört.

          1. Von welchem Typ ist httpRequest.responseXML ?
            Ich dachte vom Typ document, aber dann müssten ja die normalen Methoden, z.B. getElementById funktionieren - tun sie aber nicht.

            getElementById ist DOM Level 2. httpRequest.responseXML scheint aber nur DOM Level 1 zu unterstützen, die Funktion aber anzubieten.

            Versuche ich mit httpRequest.responseXML.documentElement etwas anzustellen kommt die selbe Fehlermeldung wie sonst auch "httpRequest.responseXML is null"

            Das sagtest du schon. Deswegen meine Frage nach Fehlern.

  2. Tach,

    Ich will mit Javascript eine XML-Datei auslesen und sie mittels DOM verarbeiten. Dazu nutze ich XMLHttpRequest, allerdings ist das erzeugte Objekt immer null. Da Ich den Code für eine Firefox Extension nutzen will, brauche ich keine Absicherung für den IE und arbeite nur lokal, sprich die js und die xml Datei liegen lokal im selben Ordner.

    ich kenne mich mit den inneren Strukturen bei Firefox-Addons nicht aus, aber widersprechen sich Zugriff auf eine lokale Datei und HTTP-Request nicht?

    mfg
    Woodfighter

  3. Hallo pinki,

    kennst du schon https://developer.mozilla.org/en/AJAX/Getting_Started?

    Wenn du die Requests nicht an einen Server, sondern an die lokale Festplatte schickst, wirst du allerdings nie den Status 200 erhalten. Ich prüfe zusätzlich auf 0:

    if (http_request.status == 200 || http_request.status == 0)

    Wenn du mit responseXML Probleme hast, solltest du dir die Daten mal im Textformat ansehen: responseText.

    Gruß, Jürgen

    1. Hi,

      kennst du schon https://developer.mozilla.org/en/AJAX/Getting_Started?

      Oh ja, danke trotzdem ;)

      Wenn du die Requests nicht an einen Server, sondern an die lokale Festplatte schickst, wirst du allerdings nie den Status 200 erhalten.

      Gut, dass du das sagst, hatte darüber auch schon nachgedahct, hab aber irgendwo sowas ähnliches gelesen und die Prüfung einfach weggelassen...

      Wenn du mit responseXML Probleme hast, solltest du dir die Daten mal im Textformat ansehen: responseText.

      Wenn ich mir das als respondText ausgeben lasse habe ich ja nur einen String oder? Den kann ich dann ja nicht mit DOM weiterverarbeiten.

      1. Hallo pinki,

        Wenn ich mir das als respondText ausgeben lasse habe ich ja nur einen String oder? Den kann ich dann ja nicht mit DOM weiterverarbeiten.

        Du bekommst den Inhalt der per httpRequest angeforderten Datei angezeigt. Gut um zu testen, was ankommt.

        Um weiter helfen zu können, solltest du mal den Inhalt der Datei (oder einen relevanten Auszug) hier posten.

        Gruß, Jürgen

        1. Um weiter helfen zu können, solltest du mal den Inhalt der Datei (oder einen relevanten Auszug) hier posten.

          Ich poste der Vollständigkeit halber alles, auch den Code den ich schon hatte:

            
          function ToolCal_Request(){  
          	var file = "testfile.xml";  
          	var http_request = null;  
          	try {  
          		http_request = new XMLHttpRequest();  
          		http_request.overrideMimeType('text/xml');  
          	} catch(e) {alert(e);}  
          	  
          	if (http_request) {  
          		try {		  
          			http_request.onreadystatechange =  
                                    function(){alertContents(http_request);};  
          			http_request.open('GET', file, true);  
          			http_request.send(null);  
          		} catch(e) {alert(e);}  
          	}  
          }  
            
          function alertContents(httpRequest) {  
          	try{  
          	if (httpRequest.readyState == 4) {  
          		if (httpRequest.status == 200 || httpRequest.status == 0){  
          			var xmldoc = httpRequest.responseText;  
          			// var root_node = xmldoc.documentElement;  
          			alert(xmldoc);  
          		}  
              }  
          	}catch(e){alert(e);}  
          }
          

          testfile.xml:

            
          <?xml version="1.0" ?>  
          <root>  
              Ich bin ein Testsatz.  
          </root>
          

          Ausgabe: "" also nichts, was ja zu erwarten war, da vorher auch schon null war.

          1. funktioniert doch?

            1. funktioniert doch?

              ähm...ja?
              warum bei dir, bei mir nicht?

              1. funktioniert doch?

                ähm...ja?
                warum bei dir, bei mir nicht?

                Kommando zurück, habe das ganze aus einer html Datei aus aufgerufen, es funktioniert tatsächlich.
                Das Problem ist nur, dass ich nicht mit html Dateien arbeite sondern mit XUL (Firefox Extension), aber zumindest bin ich jetzt der Ursache mal etwas näher gekommen. Deshalb danke erstmal an alle die mitgedacht haben :)

                1. Das Problem ist nur, dass ich nicht mit html Dateien arbeite sondern mit XUL (Firefox Extension), aber zumindest bin ich jetzt der Ursache mal etwas näher gekommen. Deshalb danke erstmal an alle die mitgedacht haben :)

                  Und warum gehst du dann nicht über eine chrome-URI (chrome://)?

                  1. Und warum gehst du dann nicht über eine chrome-URI (chrome://)?

                    Habe ich schon, selbes Ergebnis.

                    1. Habe ich schon, selbes Ergebnis.

                      Bei mir gehts!

                      1. Habe ich schon, selbes Ergebnis.
                        Bei mir gehts!

                        und was genau hast du gemacht?

                        1. und was genau hast du gemacht?

                          Die Datei in das content-Dir gepackt und in deinem Script die Zeile
                          var file = "chrome://test/content/test.xml";
                          geändert.