【问题标题】:Microsoft.XMLHTTP documentElement is NULLMicrosoft.XMLHTTP 文档元素为 NULL
【发布时间】:2015-01-16 17:20:11
【问题描述】:

有人可以在这里提供一些故障排除提示吗?对于非常小的数据结果子集,我的PostXML() 返回值为NULL。这适用于 99.9% 的使用率。我认为失败的数据可能有特殊字符,但与类似的数据集相比,它是相同的并且可以通过吗? File.asp 中的 oXMLDoc.xml 在调试时包含一个有效的 XML 字符串,但是当它返回到我的 JS 调用时它是 null

Microsoft.XMLHTTP 对象中看似有效的 XML 元素被丢弃是否存在任何已知问题?

function PostXML(sXML)

{
    var oHTTPPost = new ActiveXObject("Microsoft.XMLHTTP");
    oHTTPPost.Open("POST","File.asp", false);
    oHTTPPost.send(sXML);

    // documentElement is null???
    return oHTTPPost.responseXML.documentElement;
}

文件.asp

<%
' oXMLDoc.xml contains valid XML here, but is NULL in the calling JS
Response.ContentType = "text/xml"
Response.Write oXMLDoc.xml
%>

【问题讨论】:

  • @MarcB:不,open() 的第三个参数为 false,表示同步模式。如果同步可以在 IE 中发布,我不确定;这在不久前被许多浏览器所反对......
  • 啊,是的。 phoo...基本调试,看看你真正从ajax调用中得到了什么。 console.log(oHTTPPost)
  • 使用浏览器中的开发者工具检查响应及其 HTTP 标头
  • 确保提供的 XML 上的 mime 和 char 编码是正确的。很多时候 Microsoft.XMLHTTP 不默认为 utf8
  • @Marc B oHTTPPost 是一个 [object],但 documentElement 为空。

标签: javascript xml asp-classic xmlhttprequest


【解决方案1】:

检查响应标头。内容类型需要为application/xml

XMLHttpRequest 在当前的 IE 中可用。我建议仅将 ActiveX 用作备用。

您可以覆盖其上的内容 mimetype:

xhr = new XMLHttpRequest();
xhr.overrideMimeType("application/xml");
...

这也可能在 ActiveX 对象上。但我不确定。

另一种可能性是使用 DOMParser 将接收到的字符串转换为 Document 实例。

【讨论】:

  • 看起来有效。我已经将 ASP 构建的 XML 与处理良好且结构良好的示例进行了比较。没有什么是明显异常的。我认为它的数据,但不确定数据中的什么会杀死 javascript 中的 XML。属性中的和号 (&) 会导致问题吗?
  • 是的,XML 中的 & 符号需要编码为 &amp;amp;。不仅在属性中。
【解决方案2】:

发现问题。

使用 IE Dev/Debugger,我在其中一个字符串属性中找到了xEFxBFxBF。本产品使用 MS SQL Server,即使复制/粘贴到 Notepad++ 中,查询输出也不会反映这些字符。我假设 Ent Manager 过滤掉不支持的字符... /=

感谢大家的帮助!

【讨论】:

    【解决方案3】:

    哎呀。

    可以改用jQuery吗?

    我知道的另一件事是,如果返回的 xml 有点偏离(xml 格式错误、区分大小写、非法字符),javascript 将丢弃返回值。

    使用 jQuery,您有更好的调试选项来查看错误。

    【讨论】:

    • 不,这是生产代码。它适用于大多数电话,因此只需弄清楚有什么不同。我怀疑 javascript 正在破坏数据,但终生无法弄清楚有什么不同。
    猜你喜欢
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多