W3Schools无法复制tryit编辑器

时间:2012-05-04 09:13:19

标签: javascript html xml

我在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比我应该停止这样做

3 个答案:

答案 0 :(得分:2)

loadXMLDoc() w3schools在幕后提供使用XMLHttpRequest,这限制了同源策略。 (SOP)

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

当您在本地保存文件时,您不再访问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;
}​

答案 1 :(得分:1)

您可能在此处遇到相同的原始政策。

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

答案 2 :(得分:0)

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

其次,你不能这样做,因为loadXMLDoc正在使用AJAX,你不能使用AJAX在不同的域中请求文档(除非你使用JSONP,但这是另一个主题共)

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