在 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 中加载数据时出现错误

在核心数据项目中加载视图控制器时出现问题

当我在 python 中加载数据帧时出现 UnicodeDecodeError [重复]

在颤动中加载 api 时出现类型转换错误

尝试在 Keras 中加载顺序模型时出现“KeyError:0”