AJAX XML回复节点值迭代

时间:2009-08-16 18:59:04

标签: javascript xml ajax

我真的很感激能得到你的帮助,因为我似乎无法检测并解决我正在开发的网站上使用AJAX功能所遇到的问题。

我有一个webform对一个处理程序(.ashx)进行异步调用,该处理程序提供一个XML响应,该响应稍后由Javascript客户端函数处理,该函数将其内容放入用户 - 接口

我附上了我的处理程序生成的响应示例,我想知道的是如何获取所有<body>元素innerHTML(包含文本和子节点)要将其附加到用户界面上的<span>元素的内容。任何人都可以帮我解决这个问题吗?

处理程序返回的XML响应(通过Firebug检查):

<message>
    <content>
        <messageId>2</messageId>
        <from>Barack Obama</from>
        <fromMail>barack.obama@whitehouse.gov</fromMail>
        <subject>Yes, we can... get World Peace</subject> 
        <body>Hello, dear citizen. I'm sending you this message to invite you to join us! <a href="http://www.whitehouse.gov">Test link</a> Thank you for your time.</body>
    </content>
</message>

客户端Javascript函数,用于通过AJAX返回的数据影响用户界面innerHTML属性:

function GetMessageContentsCallback(args, resp) {
    //XML Parser
    try {
        //Internet Explorer
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(resp);
    }
    catch (e) {
        parser = new DOMParser();
        xmlDoc = parser.parseFromString(resp, "text/xml");
    }
    var msgReply = xmlDoc.getElementsByTagName('message')[0];
    var ajaxRespondeBodyInnerHTML = msgReply.getElementsByTagName(body)[0].firstChild.nodeValue;
    //this currently only delivers inner text content, without the <a href... bit and subsequent text
    document.getElementById("bodySpan").innerHTML = ajaxRespondeBodyInnerHTML;
}

2 个答案:

答案 0 :(得分:3)

你有正确的想法,但是你有语法错误。我测试过,发现问题出在预期的这条线上:

var ajaxRespondeBodyInnerHTML = msgReply.getElementsByTagName("body")[0].firstChild.nodeValue;

body 不在引号中。

有关工作示例,请参阅http://jsbin.com/ufubo/edit

编辑:此外,如果您想在XML中使用HTML,则需要将内容嵌套在CDATA标记中。我已经更新了示例以显示此内容。

编辑:我已更新示例保存了它...

答案 1 :(得分:0)

你能用

之类的东西吗?
var ajaxRespondeBodyInnerHTML = msgReply.getElementsByTagName(body)[0].text;

var ajaxRespondeBodyInnerHTML = msgReply.getElementsByTagName(body)[0].innerHTML;

可能希望抓住里面的一切?

(自从我使用通过ajax返回的xml之后已经有一段时间了)