提问人:Naruto 提问时间:10/24/2018 更新时间:10/24/2018 访问量:615
在 Javascript 中加载 XML 数据时出错
Error in loading the XML data in Javascript
问:
我在 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);
}
答:
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 解析器接受,而不是被其他人接受。
评论
dataType
$.ajax
parser = new DOMParser; xml = parser.parseFromString(data,'application/xml')
data