2010-02-24 1 views
0

Я пытаюсь проанализировать XML-файл с помощью Javascript, и я столкнулся с проблемами в IE7.Отсутствует корневой узел при загрузке XML в IE с использованием Javascript

Если у меня есть этот код:

function LoadXml() 
{ 
    var xmlPath = document.getElementById("hsTreeviewXmlPath").value; 

    var xmlhttp=false; 
    /*@cc_on @*/ 
    /*@if (@_jscript_version >= 5) 
    // JScript gives us Conditional compilation, we can cope with old IE versions. 
    // and security blocked creation of the objects. 
    try { 
     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
     alert("here1"); 
    } catch (e) { 
     try { 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     alert("here2"); 
     } catch (E) { 
     xmlhttp = false; 
     } 
    } 
    @end @*/ 
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') { 
     try { 
      xmlhttp = new XMLHttpRequest(); 
      alert("here3"); 
     } catch (e) { 
      xmlhttp=false; 
     } 
    } 
    if (!xmlhttp && window.createRequest) { 
     try { 
      xmlhttp = window.createRequest(); 
      alert("here4"); 
     } catch (e) { 
      xmlhttp=false; 
     } 
    } 

    xmlhttp.open("GET",xmlPath,false); 
    xmlhttp.send(null); 

    var xmlDoc = xmlhttp.responseXML; 

    ParseXml(xmlDoc); 
} 

function ParseXml(xmlDoc) 
{ 
    var root = xmlDoc.documentElement; 
    alert(root); 

    for(i=0; i< root.childNodes.length; i++) 
    { 
     var node = root.childNodes[i]; 
     if(node.nodeType ==1) //process element nodes (type 1) 
     { 
      if(node.childNodes.length > 1) 
      { 
       CreateChildren("hsTreeview",node); 
      } 
      else 
      { 
       AddNode("hsTreeview", node); 
      } 
     } 
    } 
} 

В FF и Chrome это работает правильно, добавляя узлы, как должно, но на IE7 я получаю сообщение об ошибке сценария и конкретную ошибку:

Object required

Это дает номер строки, относящейся к линии:

for(i=0; i< root.childNodes.length; i++) 
{ 

Внимательное окно говорит мне, что в IE, й e корневой узел, который заполняется с xmlDoc.documentElement, равен null.

Я подтвердил, используя предупреждения здесь1 и т. Д., Что в IE7 используется объект xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");.

Есть ли способ исправить это, поскольку это действительно расстраивает?

ответ

1

Убедитесь, что XML-файл подан с соответствующим типом Mime Text/xml.

Edit пыльник:

Кроме того, убедитесь, что файл XML подается через сервер HTTP из того же доменаи порт как веб-страницы. IE предотвратит доступ веб-страницы к URL-адресам за пределами их исходного домена или файлов на вашем локальном компьютере по соображениям безопасности.

+0

и как это сделать? Это всего лишь файл, расположенный в каталоге Sharepoint. В моем тестовом случае (с жесткого диска) он все еще не работает. –

+0

@Alastair Можно ли переименовать файл в 'var xmlPath' с расширением .xml и загрузить веб-страницу через http? –

+0

файл обозначен XML-файлом, путь заканчивается на «.xml». Что именно вы подразумеваете под нагрузкой через http? –