2009-02-28 2 views
4

Ich versuche, eine XML-Datei mit Javascript zu laden, und ich habe noch eine gute Funktion, die in IE, Firefox und Safari funktioniert. Die Ladefunktion ich bin derzeit mit ist im Grunde die eine gerade aus den w3schools Tutorials:TypeError: Wert nicht definiert (Ergebnis des Ausdrucks xmlDoc.load) ist kein Objekt

http://www.w3schools.com/XML/tryit.asp?filename=tryxml_dom_createelement

Der genaue Code wie folgt aussieht:

if (window.ActiveXObject) 
{ 
xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
} 
// code for Mozilla, Firefox, Opera, etc. 
else if (document.implementation.createDocument) 
{ 
xmlDoc=document.implementation.createDocument("","",null); 
} 
else 
{ 
alert('Your browser cannot handle this script'); 
} 
xmlDoc.async=false; 
xmlDoc.load(dname); 

Wo dname = die URL der XML-Datei. Dieser Code erhält ein "TypeError: Wert nicht definiert (Ergebnis des Ausdrucks xmlDoc.load) ist kein Objekt." in Safari.

Ich habe auch versucht, den Code auf dieser Seite:

http://developer.apple.com/internet/webcontent/xmlhttpreq.html

Es ist jedoch eine Null-XML-Datei liefert. Kann jemand helfen?

Antwort

0

Sie möchten vielleicht XML for <Script> betrachten. Ich habe einige Posts gesehen, die darauf hinweisen, dass sie das Problem in Safari damit gelöst haben.

+0

Danke für die schnelle Antwort! Diese Bibliothek arbeitet mit den Browsern, die ich brauche. Aber ich müsste meinen ganzen Code neu schreiben, um diese Bibliothek zu benutzen. Im Idealfall möchte ich nur meine Lade-XML-Funktion aktualisieren, um in Safari zu arbeiten, aber wenn es eine Lade-XML-Funktion gibt, kann ich aus einer Bibliothek importieren, die auch funktionieren würde. –

+0

Ich habe das gleiche Problem. Gibt es noch andere Ideen als eine Bibliothek von Drittanbietern? –

1

Klingt wie das Problem ist, dass Safari nicht document.implementation.createDocument unterstützt als Methode zur holen und Last XML-Quellen. Sie müssen eine XMLHttpRequest verwenden, um das XML-AFAIK abzurufen und zu analysieren.

Ich habe versucht, eine modifizierte Version des Codes aus dem Apple-Tutorial, das Sie verknüpft, und es schien für mich zu arbeiten. Dieser Code ist nicht der beste der Welt, und es fehlt eine Menge Fehlerbehandlung, aber es ist der einzige Beweis für das Konzept, das ich zur Hand hatte.

Hinweis: Ich empfehle dringend, eine Bibliothek zu verwenden. Es gibt Browser-Inkonsistenzen mit XMLHttpRequests und XML-Parsing. Es ist die Investition wert!

Für eine nicht-Bibliothek Version habe ich eine modifizierte Version des Safari-Code, um das XMLHttpRequest zu bekommen:

function getXHR(url,callback) { 
    var req = false; 
    // branch for native XMLHttpRequest object 
    if(window.XMLHttpRequest && !(window.ActiveXObject)) { 
     try { 
      req = new XMLHttpRequest(); 
     } catch(e) { 
      req = false; 
     } 
    // branch for IE/Windows ActiveX version 
    } else if(window.ActiveXObject) { 
     try { 
      req = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch(e) { 
      try { 
       req = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch(e) { 
       req = false; 
      } 
     } 
    } 

    if(req) { 
     req.onreadystatechange = function() { callback(req) }; 
     req.open("GET", url, true); 
     req.send(""); 
    } 
} 

die XML-Daten aus dem Ergebnis Grabbing ist nicht ohne seine eigenen Macken auch:

function getXML(response) { 
    if(response.readyState==4) { 
     //Get the xml document element for IE or firefox 
     var xml; 
     if (response.responseXML) { 
       xml = new ActiveXObject("Microsoft.XMLDOM"); 
       xml.async = false; 
       xml.loadXML(response.responseText); 
     } else { 
       xml = response.responseXML; 
     } 

     return xml; 
    } 

    return null; 
} 
Schließlich

verwenden, was man bekommt:

function callback(response) { 
    var xmlDoc = getXML(response); 
    if(xmlDoc) { 
     //do your work here 
     ... 
    }  
} 

Wenn Sie immer noch finden Sie Probleme, es gibt ein paar Dinge, die Sie überprüfen können, wird wahrscheinlich Ihr Problem lösen.

  1. Haben Sie den Inhaltstyp auf text/xml festgelegt?
  2. Geht Ihre Anfrage tatsächlich zum Server und zurück?
  3. Wenn Sie den responseText alarmieren/untersuchen, sehen Sie etwas, das nicht dazugehört?
  4. Ist Ihr XML richtig formatiert? Führen Sie es durch einen Validator.

Viel Glück! Prost.

Verwandte Themen