2009-02-28 17 views
4

Ben JavaScript kullanarak bir XML dosyası yüklemek için çalışıyorum ve IE, Firefox ve Safari'de çalışan iyi bir fonksiyonu bulmak için henüz nesne değildir.TypeError: tanımsız değer (ifade xmlDoc.load sonucu)

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

tam kod benziyor: Şu anda kullanıyorum yük fonksiyonu temelde düz W3Schools öğreticiler dışında biridir

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); 

Nerede dname = xml dosyasının url. Bu kod bir "TypeError: Value undefined (xmlDoc.load ifadesi sonucu) nesnesi değildir." Safari'de.

Ben de bu sitede kodunu denedim:

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

Ancak, boş bir XML dosyası verir. Biri yardım edebilir mi?

cevap

0

Sen XML for <Script> bakmak isteyebilirsiniz. Bununla ilgili sorunu Safari'de çözdüğünü belirten bazı yayınlar gördüm. Sorun Safari Bir getirme için yöntem ve yük XML kaynakları olarak document.implementation.createDocumentdesteklemediği gibi

+0

Hızlı cevap için teşekkürler! Bu kütüphane ihtiyacım olan tarayıcılarda çalışır. Ama bu kütüphaneyi kullanmak için bütün kodlarımı yeniden yazmam gerekirdi. İdeal olarak, yalnızca load xml işlevimi Safari'de çalışmak üzere güncellemek isterdim, ancak bir xml işlevi varsa, çalışacak bir kitaplıktan da alabilirim. –

+0

Aynı problemi aldım. Üçüncü taraf kütüphanesi kullanmanın dışında başka fikirler var mı? –

1

geliyor. XML AFAIK'yi almak ve ayrıştırmak için bir XMLHttpRequest kullanmalısınız.

Sana bağlantılı Elma öğretici kod değiştirilmiş bir sürümü denedim ve benim için çalışmaya görünüyordu. Bu kod değil dünyanın en iyisi ve çok fazla hata işleme eksik, ama elimde sahip olduğum tek kavram kanıtı.

Not: Çok kütüphane kullanılması önerilir. XMLHttpRequests ve XML ayrıştırma ile bol miktarda tarayıcı tutarsızlığı var. Bu yatırıma değer! yanı sonucundan XML kendi tuhaflıklar olmadan değildir kapma

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(""); 
    } 
} 

:

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; 
} 
olmayan bir kütüphane sürümü için

Ben XMLHttpRequest almak için safari kod değiştirilmiş bir versiyonunu kullanılmaktadır

Son olarak ne olsun kullanın:

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

Eğer hala sorun yaşıyorsanız, probleminizi çözecek bir kaç şey olup olmadığını kontrol edebilirsiniz.

  1. İçerik türünüzü text/xml olarak ayarladınız mı?
  2. İsteğiniz sunucuyu gerçekten yapıyor ve geri mi geliyor?
  3. responseText'i uyardığınızda/incelediğinizde, ait olmayan bir şey görüyor musunuz?
  4. XML'iniz düzgün biçimlendirilmiş mi? Bir doğrulayıcı aracılığıyla çalıştırın.

İyi şanslar! Şerefe.

İlgili konular