XMLHttpRequest的responseXML属性取不到值的问题

1、由于名称空间而取不到

var xmlhttp =  new XMLHttpRequest();
xmlhttp.open('POST', '../servlet/ajaxServlet', true);
   
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200){
            alert(xmlhttp.responseXML.xml);
            alert(new XMLSerializer().serializeToString(xmlhttp.responseXML.getElementsByTagName("div")[0]));          
        }
    }
}
我修改服务器端送回来的xml字段(xmlhttp.responseXML.xml),
如果是 "<?xml version=/"1.0/" encoding=/"UTF-8/" ?><html xmlns=/"http://www.w3.org/1999/xhtml/" version=/"-//W3C//DTD HTML 4.01 Transitional//EN/"><body><div>test</div></body></html>";
就取不到值。

如果是 "<?xml version=/"1.0/" encoding=/"UTF-8/" ?><html><body><div>test</div></body></html>",就能alert出来。

和解?      
怎么样才能把第一种情况的div值取出来?

解答:
【net_lover】:
<script>

str = "<?xml version=/"1.0/" encoding=/"UTF-8/" ?><html xmlns=/"http://www.w3.org/1999/xhtml/" version=/"-//W3C//DTD HTML 4.01 Transitional//EN/"><body><div>test</div></body></html>"
var doc = new ActiveXObject("MSxml2.DOMDocument")
alert(doc.loadXML(str));
doc.setProperty("SelectionNamespaces", "xmlns:x='http://www.w3.org/1999/xhtml'")
var node = doc.selectSingleNode("//x:div")
alert(node.text)
</script>

如果在你的代码可以直接

var doc = xmlhttp.responseXML

doc.setProperty("SelectionNamespaces", "xmlns:x='http://www.w3.org/1999/xhtml'")
var node = doc.selectSingleNode("//x:div")
alert(node.text)

【net_lover】:

var doc = xmlhttp.responseXML

doc.setProperty("SelectionNamespaces", "xmlns:x='http://www.w3.org/1999/xhtml'")
var node = doc.selectNodes("//x:div")[0]
alert(node.text)
也可以

2、由于Response.ContentType=("text/xml;charset=UTF-8");没写,而取不到值。

没有设置Response.ContentType=("text/xml;charset=UTF-8");输出的是“text/html”格式的,所以我老是出不到responseXML的值,在输出前面加上Response.ContentType=("text/xml;charset=UTF-8");就可以了。呵呵。。。兴奋啊。。。
贴出部分code:
 后台方法:
public void getxml()
  {
   System.Text.StringBuilder sb=new System.Text.StringBuilder();
   sb.Append("<?xml version=/"1.0/"?>");
   sb.Append("<CN>");
   for(int i=0;i<10;i++)
   {
    sb.Append("<china sex='");
    if(i%2==0)
    {
     sb.Append("1");
    }
    else
    {
     sb.Append("2");
    }
    sb.Append("' age='");
    sb.Append(i);
    sb.Append("'/>");
   }
   sb.Append("</CN>");
   Response.ContentType=("text/xml;charset=UTF-8");
   Response.Write(sb.ToString());
  }

前台:
function updatePage() { try { if(xmlhttp.readyState==4) { if(xmlhttp.status==200)
{ debugger //设置断点调试
var xml=xmlhttp.responseXML;
}

3、莫名其妙取不到

服务器端有指定头部:response.setContentType("text/xml;charset=UTF-8");
使用xmlhttp.responseText有内容,而xmlhttp.responseXML.getElementsByTagName("xmltag")就为空。

解决方法:
var doc = new ActiveXObject("MSxml2.DOMDocument")
doc.loadXML(xmlhttp.responseText);
doc.getElementsByTagName("xmltag");

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gjhuai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值