在 Javascript 中加载 XML 数据时出错
Posted
技术标签:
【中文标题】在 Javascript 中加载 XML 数据时出错【英文标题】:Error in loading the XML data in Javascript 【发布时间】:2019-03-28 09:19:49 【问题描述】:我在用 javascript 加载 XML 数据时遇到问题。但是,如果我在经典 ASP 中加载相同的 XML,它可以工作,但如果我在 Javascript 中加载相同的 XML,它会失败。
这是在经典 ASP 中加载 XML 的代码 sn-p 并且运行良好。
set ObjXMLDom = nothing
set ObjXMLDom = server.CreateObject("Microsoft.XMLDOM")
ObjXMLDom.async = False
set objSvr = Server.CreateObject("myComMethod.MyComMethod.1")
ObjXMLDom.loadXML(objSvr.GetHierarchyXML()) 'XML loads perfectly fine from server. even if the special character is Dash –
Response.Write(ObjXMLDom.xml)
用 Javascript 代码加载 XML,但对于某些特殊字符会失败。
$.ajax("get_xml_from_server.asp",
type: 'GET',
data: name: groupID, session: sesionID, Employee: empID ,
beforeSend: function ()
,
success: function (data, status, jqXhr)
//Data has got the XML string, we can see it by putting alert
alert(data);
var myXML = new ActiveXObject("Microsoft.XMLDOM");
myXML.async = false;
myXML.loadXML(data); //Here it fails for some special characters like Dash –
if (myXML.parseError.errorCode != 0)
var myErr = myXML.parseError;
alert("You have error " + myErr.reason + myErr.line + myErr.srcText);
else
alert(myXML.xml);
【问题讨论】:
jQuery 可以自动解析 xml,如果 asp 脚本没有发送正确的内容类型,则将您传递给$.ajax
的选项对象的 dataType
属性设置为。或者你甚至可以使用DOMParser to parse xml
嗨,谢谢,我尝试了 Dom 解析器,但是 parser.parseFromString(stringContainingXMLSource, "application/xml");这一行给出了语法错误。任何帮助
这只是意味着您在某个地方有错字,只需返回并检查您的语法。它应该看起来像:parser = new DOMParser; xml = parser.parseFromString(data,'application/xml')
其中data
是来自您的回调的参数
我尝试了您推荐的方式,但失败了。通过 ASP 和 Javascript 加载 XML 有区别吗?
【参考方案1】:
我怀疑存在编码问题:XML 文件采用一种编码,解析器尝试使用不同的编码对其进行解码,这导致无法解码非 ASCII 字符。您没有向我们提供有关编码的信息,因此这完全是推测性的。尝试建立
(a) 服务器上“磁盘上”的 XML 的实际编码是什么
(b) 文件开头的 XML 声明(如果有)说明编码是什么?
(c) 将 XML 有效负载传送到浏览器的 HTTP 响应的媒体类型和编码是什么?
我猜,您可能需要在 Web 服务器/HTTP 配置中进行一些更改,以确保 XML 文件被正确传送。
【讨论】:
是的,你是对的,所以为了解决这个问题,我们需要对 XML 字符串进行编码并发送给客户端。但是在客户端,我们收到相同的“Dash –”字符并且它会中断。我担心一件事,即通过 ASP 或 VB 和 Javascript 加载 XML 是否存在差异。因为 XML 在 ASP 中可以正常加载,但如果我们发送到 Javascript 则相同的字符串会中断。 正如我所说,我认为不同之处在于,在 ASP 下,解析器正确推断编码,而在浏览器中,它推断错误编码。如果不回答我的三个问题,我无法为您提供更多帮助。 目前我们还没有进行任何类型的编码,但是我尝试使用 UTF-8 进行编码, 嗨,我有一个查询,假设我们将一个 ANSI 字符串传递给 Parser,我们可以要求解析器以 UTF-8 执行解析。我们不能这样吗? "ANSI" - 你的意思是 Windows-1252 吗(这是微软专有的编码,与美国国家标准协会无关,但有时仍被老派微软称为 ANSI) .我不熟悉 Microsoft 环境,但这种编码很可能会被 Microsoft 解析器接受,而不是其他人。以上是关于在 Javascript 中加载 XML 数据时出错的主要内容,如果未能解决你的问题,请参考以下文章
在 java 中加载 freemarker 模板时出现 FileNotFoundException
在 Node js 应用程序 + MongoDb 中加载数据时出现错误