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)

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

次に、loadXMLDocAJAXを使用している場合とは異なり、AJAXを使用して別のドメインのドキュメントをリクエストすることはできません(JSONPを使用している場合を除きますが、それはまったく別のテーマです)

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

于 2012-05-04T09:17:06.590 に答える