0

我在 tryit 编辑器上测试了一些代码,当我在本地保存代码时无法复制功能,我想知道是否有人对为什么会发生这种情况有任何想法。

代码片段是

<html>
<head>
<script type="text/javascript" src="http://www.w3schools.com/dom/loadxmldoc.js"></script>
</head>
<body>  
<script type="text/javascript">
xmlDoc=loadXMLDoc("http://www.w3schools.com/dom/books.xml");
for (j=0;j<xmlDoc.getElementsByTagName("book").length;j++ )
{
    x=xmlDoc.getElementsByTagName("book")[j].childNodes;
    y=xmlDoc.getElementsByTagName("book")[j].firstChild;
    for (i=0;i<x.length;i++)
    {
        if (y.nodeType==1)  
        {
            //Process only element nodes (type 1)  
            document.write(y.nodeName + " : " +x[i].childNodes[0].nodeValue + "<br />");  
        }
        y=y.nextSibling;
    }
}
</script>
</body>
</html>

有人可以告诉我我在这里做错了什么

提前谢谢了

编辑:感谢所有 w3schools 提示。我认为我滥用 tryit 的次数超过了我应该停止这样做的次数

4

3 回答 3

2

loadXMLDoc()w3schools 在幕后提供使用,XMLHttpRequest这是受同源策略限制的。(标准操作程序)

SOP 规定您只能向同一域上的资源发出请求。

当您在本地保存文件时,您不再位于 w3schools 域中,因此无法访问其中的文件。

function loadXMLDoc(dname) {
    if (window.XMLHttpRequest) {
        xhttp = new XMLHttpRequest();
    }
    else {
        xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhttp.open("GET", dname, false);
    xhttp.send();
    return xhttp.responseXML;
}​
于 2012-05-04T09:17:14.590 回答
1

您可能在这里遇到了相同的来源策略。

尝试在本地保存 XML 文件并从那里加载它,而不是从 w3schools 的远程服务器加载。

于 2012-05-04T09:16:37.023 回答
0

首先,您应该避免使用 w3schools 作为参考http://w3fools.com

其次,您不能像loadXMLDoc使用 AJAX 那样做到这一点,也不能使用 AJAX 请求不同域中的文档(除非您使用 JSONP,但这完全是另一个主题)

http://en.wikipedia.org/wiki/Same_origin_policy

于 2012-05-04T09:17:06.590 回答