在 Javascript 中加载 XML 数据时出错

Error in loading the XML data in Javascript

提问人:Naruto 提问时间:10/24/2018 更新时间:10/24/2018 访问量:615

问:

我在 Javascript 中加载 XML 数据时遇到问题。但是,如果我在经典 ASP 中加载相同的 XML,它就可以工作,但如果我在 Javascript 中加载相同的 XML,它就会失败。

这是在经典ASP中加载XML的代码片段,它工作正常。

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);
      } 
JavaScript jQuery ajax XML 解析

评论

0赞 Patrick Evans 10/24/2018
jQuery 可以自动解析 xml,如果 asp 脚本没有发送正确的内容类型,则设置传递给的 options 对象的属性。或者你甚至可以使用 DOMParser 来解析 xmldataType$.ajax
0赞 Naruto 10/24/2018
嗨,谢谢,我尝试了 Dom 解析器,但是 parser.parseFromString(stringContainingXMLSource, “application/xml”);此行给出语法错误。任何帮助
0赞 Patrick Evans 10/24/2018
这只是意味着你在某个地方有一个错别字,只需返回它并检查你的语法。它应该看起来像这样:来自回调的参数在哪里parser = new DOMParser; xml = parser.parseFromString(data,'application/xml')data
0赞 Naruto 10/24/2018
我尝试了你推荐的方式,它失败了。通过ASP和Javascript加载XML有区别吗?

答:

1赞 Michael Kay 10/24/2018 #1

我怀疑存在编码问题:XML 文件采用一种编码,并且解析器尝试以不同的编码对其进行解码,这导致无法解码非 ASCII 字符。您没有向我们提供有关编码的信息,因此这完全是推测。尝试建立

(a) 服务器上“磁盘上”的XML的实际编码是什么

(b) 文件开头的 XML 声明(如果有的话)说编码是什么?

(c) 将 XML 有效负载传送到浏览器的 HTTP 响应的媒体类型和编码是什么?

我猜,很有可能您需要在Web服务器/ HTTP配置中进行一些更改,以确保正确交付XML文件。

评论

0赞 Naruto 10/24/2018
是的,你是对的,所以为了克服这个问题,我们需要对XML字符串进行编码并发送到客户端。但是在客户端,我们收到相同的“破折号-”字符,它中断了。我担心一件事,即通过ASP或VB和Javascript加载XML是否有区别。因为XML在ASP中加载良好,但如果我们发送到Javascript,它会中断。
0赞 Michael Kay 10/24/2018
正如我所说,我认为区别在于,在 ASP 下,解析器正确地推断编码,而在浏览器中,它错误地推断编码。如果没有回答我的三个问题,我无法为您提供更多帮助。
0赞 Naruto 10/24/2018
到目前为止,我们没有进行任何类型的编码,但是我尝试使用 UTF-8 进行编码,
0赞 Naruto 10/24/2018
嗨,我有一个查询,假设我们将一个 ANSI 字符串传递给解析器,我们可以要求解析器以 UTF-8 执行解析。我们不能这样做吗?
0赞 Michael Kay 10/24/2018
“ANSI” - 你的意思是Windows-1252吗(这是Microsoft专有编码,与美国国家标准协会无关,但有时仍被老派的Microsofties称为ANSI)。我不熟悉 Microsoft 环境,但这种编码很可能会被 Microsoft 解析器接受,而不是被其他人接受。