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");