Ajax:不从XML文件中检索数据

时间:2014-04-02 17:15:05

标签: javascript html ajax xml

我正在学习ajax并试图在页面上显示一些数据:

这是我从xml文件中检索数据的方法:

function MakeXMLHTTPCall() {
    var xmlHttpObj;
    xmlHttpObj = CreateXmlHttpRequestObject();
    if (xmlHttpObj) {
        xmlHttpObj.open("GET", "http:// " + location.host + "/XmlHttpExample1/DataFile.xml", true);

        xmlHttpObj.onreadystatechange = function () {

            if (xmlHttpObj.readyState == READYSTATE_COMPLETE) {
                document.getElementById("divResults").innerHTML = xmlHttpObj.responseText;
            }
        }
        xmlHttpObj.send(null);
    }
}

这是一个定义html元素的div片段,用于保存数据:

<form id="form1" runat="server" method="post">
<div>
    <input type="button" onclick="MakeXMLHTTPCall();" value="Text XMLHTTP Call" />
    <br />
    <br />
    <div id="divResults">{no results}</div>
</div>
</form>

这是我的CreateXmlHttpRequestObject()方法:

function CreateXmlHttpRequestObject() {

    var xmlHttpObj;
    if (window.XMLHttpRequest){
            xmlHttpObj = new XMLHttpRequest();
    }
    else {
        try {
            xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
            xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
        }
    }

    if (window.ActiveXObject) {
        try{
            xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e){
            xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
        }
    }
    return xmlHttpObj;
}

var READYSTATE_UNINITILIZED = 0;
var READYSTATE_LOADING = 1;
var READYSTATE_LOADED = 2;
var READYSTATE_INTERACTIVE = 3;
var READYSTATE_COMPLETE = 4;

这是我的xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<Customers>
  <Customer>
    <Firstname>John</Firstname>
    <Lastname>Doe</Lastname>
    <email>john.do@test.com</email>
  </Customer>
  <Customer>
    <Firstname>Alan</Firstname>
    <Lastname>Anonymous</Lastname>
    <email>anon@ymous.com</email>
  </Customer>
  <Customer>
    <Firstname>Marvin</Firstname>
    <Lastname>Martian</Lastname>
    <email>marvin@mars.com</email>
  </Customer>
</Customers>

我调试了代码。 XMLHttpRequest对象已创建。问题是,数据不会显示。

我做错了什么?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

听起来你需要做一些调试。有很多事情,在这个设置中可能出错。因此,请尝试完成这些步骤,并确定您的代码实际工作量。您将在步骤3中找到错误:)

  1. 检查实际调用函数MakeXMLHTTPCall()。发出警报(1);语句在函数顶部,然后单击按钮。如果没有弹出文本“1”的弹出窗口,则甚至不会调用此函数。这很可能是由于您的javascript中某处存在语法错误。
  2. 现在您已经确定,MakeXMLHTTPCall()被调用,当您单击该按钮时,请检查您的if语句。放置警报(1);作为if语句中的第一件事。如果这不带弹出窗口,则表明您的xmlHttpObj未正确创建。因此,请检查您的CreateXmlHttpRequestObject()以查看它是否正常工作。
  3. 检查您提取的网址是否确实存在。你会发现,你不小心错了。那就是“http://”应该是“http://”
  4. 我希望你不介意我给你解释我是如何发现这个错误的。不知道如何调试代码是非常令人沮丧的。