Internet Explorer XML Ajax回复值迭代

时间:2009-10-15 10:52:15

标签: javascript xml ajax parsing internet-explorer-8

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

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

我附上了我的处理程序生成的响应的示例,我想知道的是为什么Internet Explorer在解析XML响应时获得“null”引用(参见上文)。我已经将它用于Firefox,Chrome和Opera,它可以工作。 当XML响应元素不包含HTML内容时,它甚至可以在Internet Explorer上运行。奇怪的?任何人都可以帮我解决这个问题吗?

代码剪断了我的Javascript对象,对该处理程序进行了异步AJAX调用:

if (window.XMLHttpRequest) {
    // Mozilla/Safari/IE 7+
    http = new window.XMLHttpRequest();
    if (http.overrideMimeType)
    http.overrideMimeType("text/xml");
}
else {
    // IE 5/6
    http = new ActiveXObject("Microsoft.XMLHTTP");
}

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

<reply>
    <message>
        <messageId>2</messageId>
        <body><![CDATA[I'm sending you this message to invite you to join us!<br/><a href="http://www.whitehouse.gov">White House.gov</a><br/>Thank you for your time.]]></body>
    </message>
</reply>

客户端Javascript函数用于通过AJAX返回的数据影响用户界面(在本例中,我通过简单地尝试打印出消息ID简化了它):

function GetMessageContentsCallback(args, resp) {

    // Response only contains one "message" element (at the 1st position)
    var message = resp.getElementsByTagName('message')[0];

    // This alert prints "null" on IE, but works OK on Firefox, Chrome & Opera!
    alert("message = " + message );

    /* ...and IE then breaks here, with this message:
       "Microsoft JScript: 'null' is null or not an object" */
    var messageId = message.getElementsByTagName('messageId')[0].firstChild.nodeValue;
    alert("messageId = " + messageId);
}

我到底做错了什么?当此XML回复不包含HTML内容时,它可以正常工作。当它包含HTML内容时,Internet Explorer无法使用我的解决方案......尽管其他人(Firefox,Chrome甚至Opera)都可以!该死的! :(

2 个答案:

答案 0 :(得分:1)

最好的方法是将所有无效的xml字符转换为其等效实体,或者将该值与可能的无效xml字符一起放在服务器端使用CDATA。

您应该在ASHX到达客户端之前对其进行编码:

而不是拥有这个xml:

<reply>
    <message>
        <messageId>2</messageId>
        <body>I'm sending you this message to invite you to join us!<br/><a href="http://www.whitehouse.gov">White House.gov</a><br/>Thank you for your time.</body>
    </message>
</reply>

新的XML格式应为:

<reply>
    <message>
        <messageId>2</messageId>
        <body>I'm sending you this message to invite you to join us!&lt;br/&gt;&lt;a href=&quot;http://www.whitehouse.gov&quot;&gt;White House.gov&lt;/a&gt;&lt;br/&gt;Thank you for your time.]]></body>
    </message>
</reply>

或更好的一个:

<reply>
    <message>
        <messageId>2</messageId>
        <body><![CDATA[I'm sending you this message to invite you to join us!<br/><a href="http://www.whitehouse.gov">White House.gov</a><br/>Thank you for your time.]]></body>
    </message>
</reply>

答案 1 :(得分:0)

好的,就我读到你的答案而言,我开始认为你的xml中有一些特殊的字符。我建议您在请求的xml响应之上添加xml声明,例如<?xml version="1.0" encoding="ISO-8859-1"?>,但在xml响应中有适当的编码。

以下是XML Encoding详细信息。 Here是强制IE获得正确编码的另一种方法。

上一篇文章

您是否在回调函数中检查XmlHttpRequest状态,如下所示?

if(http.readyState == 4)
   if(http.status == 200)
      var res = http.responseXML;

以下是有关onreadystatechange的一些信息。