发送XML请求的问题

时间:2011-09-20 06:06:02

标签: javascript xml

将基本XML文件阅读器编写到HTML页面中。我无法从XML文件中读取数据。这是我的设置:我有三个文本字段和一个按钮。按下按钮时,会输入请求以获取三个XML并填充三个文本字段。但是,我遇到了请求状态的问题。我得到状态代码0,而不是200.根据我的研究(http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972),我认为它与交叉有关域名拦截。我尝试将源XML放在本地和服务器上。

<html>
<head>
<script type="text/javascript">
function displayQuotes()
{
    var xmlhttp;
    xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function()
    {
        //if (xmlhttp.readyState==4 && xmlhttp.status==200)
        //{
            document.getElementById("quote1").innerHTML=xmlhttp.status;
        //}
    }   
    xmlhttp.open("GET","http://filebox.vt.edu/users/yiuleung/project5/letter.xml",true);
    xmlhttp.send();
    xmlDoc=xmlhttp.responseXML;

    document.getElementById("quote1").innerHTML=
        xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
    document.getElementById("quote2").innerHTML=
        xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
    document.getElementById("quote3").innerHTML=
        xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
}
</script>
</head>
<body>
<div id="quote1" style="margin:0;padding:0;position:absolute;left:65px;top:319px;width:250px;height:16px;text-align:left;z-index:2;">
    <font style="font-size:13px" color="#000000" face="Arial">Quote 1</font></div>

<div id="quote2" style="margin:0;padding:0;position:absolute;left:65px;top:389px;width:250px;height:16px;text-align:left;z-index:3;">
    <font style="font-size:13px" color="#000000" face="Arial">Quote 2</font></div>

<div id="quote3" style="margin:0;padding:0;position:absolute;left:65px;top:458px;width:250px;height:16px;text-align:left;z-index:4;">
    <font style="font-size:13px" color="#000000" face="Arial">Quote 3</font></div>

<input type="button" id="shuffle_button" name="" value="Shuffle" onClick=displayQuotes() style="position:absolute;left:316px;top:228px;width:96px;height:25px;font-family:Arial;font-size:13px;z-index:10">
</body>
</html>

1 个答案:

答案 0 :(得分:2)

您使用xmlhttp.open("GET","letter.xml",true); - 它以异步模式打开XMLHttpRequest。但是你的代码的下两行预计会在同步模式下工作。您需要切换到同步模式:xmlhttp.open("GET","letter.xml",false);或(更好)修改代码以便在异步模式下工作,如下例所示:

function displayQuotes()
{
  var xmlhttp;
  xmlhttp=new XMLHttpRequest();
  xmlhttp.open("GET","letter.xml",true);
  xmlhttp.onreadystatechange=function() {
    console.info(xmlhttp.readyState,"|",xmlhttp.status,"|",xmlhttp.statusText); // for debugging only
    if(xmlhttp.readyState===4&&xmlhttp.status===200) {
      // HTTP OK
      xmlDoc=xmlhttp.responseXML; // maybe var xmlDoc ???
      document.getElementById("quote1").innerHTML=
        xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
      document.getElementById("quote2").innerHTML=
        xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
      document.getElementById("quote3").innerHTML=
        xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
    }
  };
  xmlhttp.send(null);
}

在MDN中使用XMLHttpRequest:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest