一个简单问题,responseXML取不到值

chenguang79 2007-12-18 04:54:34
  我刚学ajax,按着书上写的代码为下面。
  area.xml
<?xml version="1.0" encoding="GBK" ?>
<states>
<north>
<state>north1</state>
<state>north2</state>
<state>north3</state>
</north>
<south>
<state>south1</state>
<state>south2</state>
<state>south3</state>
</south>
<east>
<state>east1</state>
<state>east2</state>
<state>east3</state>
</east>
<west>
<state>west1</state>
<state>west2</state>
<state>west3</state>
</west>
</states>
1.html
<HTML xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<TITLE> New Document </TITLE>
<meta http-equiv="Content-Type" content="text/xml; charset=GBK" >
<script language="javascript" type="text/javascript">
var xmlhttp;
var requestType = "";
function createXmlHttpRequest()
{
if(window.ActiveXObject)
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
}
function startRequest(requestedlist)
{
requestType = requestedlist;
createXmlHttpRequest();
xmlhttp.onreadystatechange = handleStateChange;
xmlhttp.open("GET","area.xml",true);
xmlhttp.send(null);
}
function handleStateChange()
{
/*if(xmlhttp.readyState==1)
{
//document.getElementById("div1").innerHTML = "加载中.......";
}*/
if(xmlhttp.readyState==4)
{
if(requestType=="all")
{
listAllStates();
}
else if(requestType=="north")
{
listEastStates();
}
}
}
function listAllStates()
{
var XmlDoc = xmlhttp.responseXML;
var allState = XmlDoc.getElementsByTagName("state");
alert(XmlDoc);
outputlist("所有的节点",allState);
}
function listEastStates()
{
var XmlDoc = xmlhttp.responseXML;
var eastNode = XmlDoc.getElementsByTagName("north")[0].getElementsByTagName("state");
//var eastState = eastNode;
outputlist("east中的节点",eastNode);
}
function outputlist(title,states)
{
var out = title;
var currentState = null;
for(var i=0;i<states.length;i++)
{
currentState = states[i];
out = out + "\n-" + currentState.childNodes[0].nodeValue
}
//document.getElementById("div1").innerHTML = out;
alert(out);
}
</script>
</HEAD>

<BODY>
<FORM METHOD=POST ACTION="">
<input type="button" name="all" value="显示全部信息" onClick="startRequest('all')"><br>
<input type="button" name="east" value="显示east信息" onClick="startRequest('north')"><br>
<div id="div1"></div>
</FORM>
</BODY>
</HTML>
现在是var XmlDoc = xmlhttp.responseXML;总是取不到值, 不知道为什么,在网上查了一下,上面说要加上
<meta http-equiv="Content-Type" content="text/xml; charset=GBK" >
可是我加上了,还是不好用啊
...全文
302 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Go 旅城通票 2007-12-18
  • 打赏
  • 举报
回复
应该是xml路径不正确

function   handleStateChange()
{
/*if(xmlhttp.readyState==1)
{
//document.getElementById("div1").innerHTML = "加载中.......";
}*/
if(xmlhttp.readyState==4)
{
if(xmlhttp.status==200)//加个判断是否正确返回
{
if(requestType=="all")
{
listAllStates();
}
else if(requestType=="north")
{
listEastStates();
}
}
}
else if(xmlhttp.status==404)
alert("XML文件路径不正确!");
else alert("未知错误!");
}
擒兽 2007-12-18
  • 打赏
  • 举报
回复
直接去搞JSON,不要搞XML,保证你会说爽!

上网搜资料,EMACScript JavaScript核心基础一定要看,它很有特色,很多地方与你熟悉的语言有很多细节区别。
braveboy 2007-12-18
  • 打赏
  • 举报
回复
<HTML   xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<TITLE> New Document </TITLE>
<meta http-equiv="Content-Type" content="text/xml; charset=GBK" >
<script language="javascript" type="text/javascript">
var xmlhttp;
var requestType = "";
function createXmlHttpRequest()
{
if(window.ActiveXObject)
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
}
function startRequest(requestedlist)
{
requestType = requestedlist;
createXmlHttpRequest();
xmlhttp.onreadystatechange = handleStateChange;
xmlhttp.open("GET","aa.xml",true);
xmlhttp.send(null);
}
function handleStateChange()
{
/*if(xmlhttp.readyState==1)
{
//document.getElementById("div1").innerHTML = "加载中.......";
}*/
if(xmlhttp.readyState==4)
{
if(requestType=="all")
{
listAllStates();
}
else if(requestType=="north")
{
listEastStates();
}
}
}
function listAllStates()
{
var XmlDoc = xmlhttp.responseXML;
var allState = XmlDoc.getElementsByTagName("state");

outputlist("所有的节点",allState);
}
function listEastStates()
{
var XmlDoc = xmlhttp.responseXML;
var eastNode = XmlDoc.getElementsByTagName("north")[0].getElementsByTagName("state");
//var eastState = eastNode;
outputlist("east中的节点",eastNode);
}
function outputlist(title,states)
{
var out = title;
var currentState = null;
for(var i=0;i <states.length;i++)
{
currentState = states[i];
out = out + "\n-" + currentState.childNodes[0].nodeValue
}
document.getElementById("div1").innerHTML = out;

}
</script>
</HEAD>

<BODY>
<FORM METHOD=POST ACTION="">
<input type="button" name="all" value="显示全部信息" onClick="startRequest('all')"> <br>
<input type="button" name="east" value="显示east信息" onClick="startRequest('north')"> <br>
<div id="div1"> </div>
</FORM>
</BODY>
</HTML>
aa.xml
<?xml version="1.0" encoding="GBK" ?>
<states>
<north>
<state> north1 </state>
<state> north2 </state>
<state> north3 </state>
</north>
<south>
<state> south1 </state>
<state> south2 </state>
<state> south3 </state>
</south>
<east>
<state> east1 </state>
<state> east2 </state>
<state> east3 </state>
</east>
<west>
<state> west1 </state>
<state> west2 </state>
<state> west3 </state>
</west>
</states>

这是你的原码,我只是改了个名aa.xml
在IE,FF下增均在输出 ,RP,还是..........(*__*)!
我也是初学这玩意
aaron81939097 2007-12-18
  • 打赏
  • 举报
回复
返回XML时要加HTTP头
Response.ContentType = "text/xml"
xiaolei1982 2007-12-18
  • 打赏
  • 举报
回复
<script language="javascript">
function GE(a){return document.getElementById(a);}
function Check(){


var X=new ActiveXObject("Msxml2.XMLHTTP");
if(X){

X.onreadystatechange=function(){
if(X.readyState==4){

if(X.status==200){
alert(X.responseText) ;
}

}

};
X.open('POST','1.xml',true);

X.send(null)
}
else{
GE('msg').innerHTML='你的不支持XMLHttpRequest'
}
}
</script>


<?xml version="1.0" encoding="gb2312"?>
<recipes>
<recipe>
<list>hellow1</list>
<list>hellow2</list>
<list>hellow3</list>
</recipe>
</recipes>


测试好的可以读到
aaron81939097 2007-12-18
  • 打赏
  • 举报
回复
对不起,小第看错
aaron81939097 2007-12-18
  • 打赏
  • 举报
回复
楼主没有定义xmlHttp
function startRequest(requestedlist)
{
requestType = requestedlist;
xmlHttp=createXmlHttpRequest(); //这里应给xmlHttp付值
xmlhttp.onreadystatechange = handleStateChange;
xmlhttp.open("GET","area.xml",true);
xmlhttp.send(null);
}
tantaiyizu 2007-12-18
  • 打赏
  • 举报
回复

哦 ,这样啊

那就在 if(xmlhttp.readyState==4) 里面去 alert(xmlhttp.responseXML)
看有没有 ,有的话 最好是传到 listAllStates 方法里 ,而不是这样去取

另外 ,这些东西 最好避免 定义成全局的 ,在后续处理中将会给你带来很大麻烦

一些细节的处理也不要暴露到外边 ,在别人调你这个东西的时候

争取做到这点 : 知道最少的东西 ,做更多的事情
chenguang79 2007-12-18
  • 打赏
  • 举报
回复
楼上的兄弟,不好意思,你的我看不明白啊。我这是才学ajax啊
tantaiyizu 2007-12-18
  • 打赏
  • 举报
回复


//楼主的实在太乱 ,下面的可以供你调用 ,换到你的里面就是:

window.onload = function(){
alert(Ajax.json("area.xml" ,"text"));
};

//ajax dream && ajax 操作
var Try = {
these: function() {
var returnValue = null;
for (var i = 0, length = arguments.length; i < length; i++)
{
var lambda = arguments[i];
try {
returnValue = lambda() ;
break;
}
catch (e)
{
returnValue = e;
}
}
return returnValue;
}
};
var Ajax = {
Create: function(){
return Try.these(
function() {return new XMLHttpRequest()},
function() {return new ActiveXObject('Msxml2.XMLHTTP')},
function() {return new ActiveXObject('Microsoft.XMLHTTP')}
) || null ;
},
Xml: function(oXML , sURL){
var oXmlHttp = this.Create() ;
oXmlHttp.Open("POST" , sURL , false);
oXmlHttp.Send(oXML);

return oXmlHttp.responseXML;
},
Json: function(sURL , sType){
var JsonHttp = this.Create();
JsonHttp.Open("POST" , sURL , false);
JsonHttp.Send(null);

if (JsonHttp.responseText != ""){
if (sType == 'text'){
return JsonHttp.responseText ;
}
else{
eval("var data = " + JsonHttp.responseText) ;
return data ;
}
}
}
};

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧