1

XML ドキュメントを Javascript にロードして Web サイトに出力できるようにしようとしていますが、XML ドキュメントをロードすると null になるため、読み取ろうとするたびに例外が発生します。これが私のコードです:

ウェブページのコード

    var xmlDoc;

    loadXML();

    function loadXML(){
        xmlDoc = loadXMLDoc("http://www.tomrichardsonweb.co.uk/ABC/xml/pubs.xml");
    }

    function loadPub(){ 
        if(xmlDoc != null){ 
            document.getElementById('pub').innerHTML=
            xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
        }else{
            alert("null");
        }

loadXMLDoc メソッド

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;

}

XML ファイル

    < ?xml version="1.0" encoding="UTF-8" ?>
<pub>
    <name>Bay Horse</name>
    <description>Situated at the foot of the stunning Pennine Range, amidst the          breathtaking landscape of Rivington, you will find The Bay Horse Inn. With open fires, cosy corners and a warm friendly atmosphere, this family run inn really does have something for everyone.

The perfect place to relax with family and friends our well stocked bar offers the finest cask ales, refreshing lagers and ciders, quality wines and spirits and a wide selection of soft drinks, teas and coffees.

 For diners our chalkboards boast classic pub food, all freshly prepared and cooked to order, alongside a great range of award winning "Pieminister" pies.

 And for those visiting the area on business or pleasure, or just passing through on a wider journey, and looking for somewhere to rest their heads then our bed and breakfast rooms could be just the answer!  Our friendly team (and our friendly regulars!) will try to make your stay as enjoyable as possible.</description>
    <web>N/a</web>
    <email>N/a</email>
    <phone>N/a</phone>
    <image></image>
</pub>

私は常にxmlDoc = nullを取得しています。ここで何が問題なのですか?

編集: Chrome のネットワーク タブの下に、xml ドキュメントが読み込まれたと表示されます。私のマシンからではなく、私のウェブサイトがホストされているサーバーでこれらすべてをテストしています。

4

1 に答える 1

0

まず、すべてのインライン スクリプトを js ファイルに移動して、コードを簡単に管理できるようにする必要があります。

function loadPub(i, xml){....}

function loadXMLHTTP(url, callbackfn, args) {//callbackfn:fn you need to load after xml loads, args:argument array to pass to the call back function
  if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } else {
    alert("No browser support for XML-HTTP-request object")
  }
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        args.push( xmlhttp.responseXML);
        callbackfn.apply(this,args)
    }
  }
  xmlhttp.open("GET", url, false);
  xmlhttp.send(null);
}
function loadXML(){
        xmlDoc = loadXMLHTTP("xml/pubs.xml",loadPub,[0]);
}
loadXML();

この関数では、ajax リクエストは xml がサーバーから読み込まれるのを待ってから、args と xml で渡した関数を呼び出します。

于 2012-09-07T11:31:59.067 に答える