0

我有一个用 .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;
4

1 回答 1

0

哎呀!终于想通了。
出于某种原因,仅访问 responseXML 会导致错误。
但是在访问 XML 中实际需要的元素时,没有错误,我能够访问该元素。
以下将有助于更好地说明我所做的。
我稍微更改了 Web 服务端的 XML,以包含我正在寻找的字符串作为值属性 -

[WebMethod]
public XmlDocument GetInfo(string key)
{
    //do stuff  
    string final = "<root>"+"<finalURL value=\"" + "sample" + "\"></finalURL>" + "</root>";
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(final);
    return doc;
}

我在 javascript 中访问了 XML 的 value 属性,如下所示 -

xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
    alert("REsponse Text = " + xmlhttp.responseText 
        + "\n---------------\n"
        + "ResponseXML value = "+xmlhttp.responseXML.getElementsByTagName("finalURL")[0].getAttribute("value"));
    }
  };
xmlhttp.open("GET","http://localhost:64400/WebService.asmx/GetInfo?key="+str,true);
xmlhttp.setRequestHeader("Content-Type", "text/xml");
xmlhttp.send();

它奏效了。!-
http://i.stack.imgur.com/u5ySS.png

于 2013-04-19T21:31:04.940 回答