2012-03-14 58 views
1

我已經創建了一個XML文件,並且正在嘗試使用我的Web瀏覽器訪問它。 當我使用IE瀏覽器時,腳本工作得很好,一切正常,但是當我嘗試在另一個瀏覽器中打開它時,它不起作用。 經過研究,我瞭解到它來自於我在JavaScript中與Microsoft連接的第一行中實例化的ActiveX內容。
這就是爲什麼我發現了另一個代碼,會自動檢查瀏覽器的性質:用於檢測瀏覽器版本的XML/Javascript

<script type="text/javascript"> 
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
    } else { // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.open("GET", "emp.xml", false); 
    xmlhttp.send(); 
    xmlDoc = xmlhttp.responseXML; 

    //function loadXML(xmlFile) 
    //{ 
    //xmlDoc.async="false"; 
    //xmlDoc.onreadystatechange=verify; 
    //xmlDoc.load(xmlFile); 
    //xmlObj=xmlDoc.documentElement; 
    //} 

其實,就在函數的最後兩行是足以載入XML文件。前兩行是爲了確保我們稍後可能用來操作XML文件數據的JavaScript函數不對未初始化的對象執行任何函數。因此調用函數* () *。

<?php 
//function verify()/ 
    //{ 
     // 0 Object is not initialized 
     // 1 Loading object is loading data 
     // 2 Loaded object has loaded data 
     // 3 Data from object can be worked with 
     // 4 Object completely initialized 
     //if (xmlDoc.readyState != 4) 
    // { 
     // return false; 
     //} 
    //} 
?> 

loadXML('emp.xml'); 
alert(xmlDoc.childNodes(0).firstChild.text); 
alert(xmlDoc.childNodes(3).childNodes(1).firstChild.text); 

我得到JScript運行時錯誤訪問被拒絕...該怎麼辦?

MY NEW CODE:

if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp = new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.open("GET","http://www.multimediaprof.com/test/emp.xml",true); 
xmlhttp.send(); 
xmlDoc=xmlhttp.responseXML; 
alert(xmlDoc.childNodes[1].firstChild.text); 
</script> 
</head> 
</html> 

JQUERY答案,我該如何實現呢?

+0

我猜你從不同的環節採取的事情,如果我沒有記錯。請閱讀以下鏈接: linguini 2012-03-14 08:33:40

+0

你給我的第二個鏈接是我開始使用的第二個鏈接,它不適用於除IE以外的任何瀏覽器,這就是爲什麼我試圖將兩個不同的鏈接放在一起嘗試使它在任何瀏覽器上都能正常工作,即使我嘗試與包含測試功能的鏈接,JS運行時錯誤發生,它不會在任何瀏覽器上運行......任何想法? – 2012-03-14 08:37:31

+0

在這裏你有一個非常簡單的例子,http://www.w3schools.com/dom/dom_loadxmldoc.asp。請記住,如何在本地加載文件。請驗證文件'xmlDoc = loadXMLDoc(「books.xml」);'你可以給這樣的'文件://C:/文件' – linguini 2012-03-14 08:48:46

回答

1

問題是,您試圖通過file://協議訪問您的計算機上的文件。這是一種安全風險,大多數瀏覽器都不允許。

解決此問題的辦法是將您的文件託管在本地或在線的服務器上。

如果您使用Google Chrome,則可以使用--allow-file-access-from-files標誌運行它以使其正常工作。

編輯:我認爲你有一個語法錯誤的位置:

alert(xmlDoc.childNodes(0).firstChild.text); 

childNodes對象是一個數組,而不是一個函數。因此,應該使用方括號[],而不是括號,()

EDIT2:如果你使用jQuery,語法如下:

$.get("file.xml", function(data){ 
    //Your data is accessible through the data variable here! 
    console.log("Data Loaded: " + data); 
}); 

更多文檔:http://api.jquery.com/jQuery.get/

+0

您的解決方案使訪問錯誤消失,但是一個新的錯誤,新的一個是,他無法找到childenodes,請注意,在將瀏覽器測試功能之前,在IE上我能夠看到警報的結果,任何想法plz – 2012-03-14 09:04:53

+0

我的不好,它的工作..你能分享一些關於訪問本地XML文件的知識嗎?我很新 – 2012-03-14 09:16:33

+0

注意它不能在IE瀏覽器以外的任何瀏覽器上運行...怎麼辦? – 2012-03-14 09:17:54

1
<html> 

    <body> 
     <script type="text/javascript"> 
      if (window.XMLHttpRequest) { 
       xhttp = new XMLHttpRequest(); 
      } else // for older IE 5/6 
      { 
       xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      xhttp.open("GET", "/Users/kart2006/Desktop/emp.xml", false); 
      xhttp.send(""); 
      xmlDoc = xhttp.responseXML; 

      document.write(xmlDoc.documentElement.nodeName + " loaded"); 
      var str = xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue; 
      alert(str); 
     </script> 
    </body> 

</html> 

XML文件:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<!-- Edited by XMLSpy® --> 
<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 

    <body>Don't forget me this weekend!</body> 
</note> 

記住,我在Mac中加載了'emp.xml'文件。在Windows的資源://「

enter image description hereenter image description here

+0

你的代碼完美工作在IE但只是沒有鍛鍊鉻既不firefox ...怎麼辦? – 2012-03-14 12:24:03

+0

@ELias Rahme:我已經在Firefox,Safari瀏覽器中成功測試過。 – linguini 2012-03-14 12:51:52

+0

對於谷歌鉻檢查在這裏:http://code.google.com/p/chromium/issues/detail?id = 988 – linguini 2012-03-14 12:58:55