我有一个用 .NET 编写的小型 Web 服务,如下所示 -
[WebMethod]
public XmlDocument GetInfo(string key)
{
//do stuff
string final = "<finalURL>" +"sample"+"</finalURL>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(final);
return doc;
}
浏览器中的 Web 服务响应 - http://i.stack.imgur.com/yBryl.png
我正在像这样的简单Javascript中使用这个网络服务 -
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
alert("REsponse Text = " + xmlhttp.responseText); //this is fine
//alert(xmlhttp.responseXML); // does not even open the alert box, is null
}
};
xmlhttp.open("GET","http://localhost:64400/WebService.asmx/GetInfo?key="+str,true);
xmlhttp.setRequestHeader("Content-Type", "text/xml");
xmlhttp.send();
responseText 很好,但 responseXML 始终为空。我已经发送了内容类型,并通过验证我的浏览器是否能够读取 Web 服务响应来检查是否返回了有效的 xml。
http://i.stack.imgur.com/3rg4J.png
这是来自 IE9 的 xmlhttpRequest 对象本身(它在 responseBody 中有一些非 unicode 字符)-
xmlhttp
[object XMLHttpRequest] {
ontimeout : null,
responseBody : 㼼浸敶獲潩㵮ㄢ〮•湥潣楤杮∽瑵ⵦ∸㸿昼湩污剕㹌慳灭敬⼼楦慮啬䱒>,
timeout : 0,
onload : null,
onreadystatechange : function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { alert("REsponse Text = " + xmlhttp.responseText); parser = new DOMParser(); xmlDoc = parser.parseFromString(xmlhttp.responseText, "text/xml"); alert(xmlDoc); path =,
readyState : 4,
responseText : "<?xml version="1.0" encoding="utf-8"?> <finalURL>sample</finalURL>",
responseXML : ,
status : 200,
statusText : "OK"
...
}
我究竟做错了什么?任何帮助是极大的赞赏。
Webservice 修改为使用 UTF-16 -
string final = "<root>"+"<finalURL>" + "sample" + "</finalURL>" + "</root>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(final);
XmlDeclaration xmldecl;
xmldecl = doc.CreateXmlDeclaration("1.0", "UTF-16", null);
XmlElement root = doc.DocumentElement;
doc.InsertBefore(xmldecl, root);
return doc;