2012-03-14 56 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