Ajax得到xml中的数据永远的object

genguyige 2010-08-04 09:28:27
我是想用Ajax来模拟一下百度的自动提示的功能,有两个页面一个是请求页 一个是返回xml文件的页 但是用请求页返回的时侯总是object 不知道怎么回事啊

<%@page contentType="text/html;charset=gbk"%>
<%@page import ="org.dom4j.*"%>

<head>
<title>测试代码</title>


<!--这里是Ajax的地方-->
<script type="text/javascript">
var xmlHttp;
var completeDiv;
var inputField;
var nameTable;
var nameTableBody;
var inputField;


function createXMLHttpRequest(){//创建xmlhttp
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}


function initVars(){//初始化成员变量
inputField=document.getElementById("names");
nameTable=document.getElementById("name_table");
completeDiv=document.getElementById("popup");
nameTableBody=document.getElementById("name_table_body");

}


function findNames(){//发送请求
initVars();
if(inputField.value.length>0){
createXMLHttpRequest();
var url="test12.jsp?names="+escape(inputField.value);
xmlHttp.open("get",url,true);
xmlHttp.onreadystatechange=callback;xmlHttp.send(null);
}
else{
clearNames();
}
}



function clearNames(){//清除信息
var ind=nameTableBody.childNodes.length;
for(var i=ind-1;i>=0;i--){
nameTableBody.removeChild(nameTableBody.childNodes[i]);
}
completeDiv.style.border="none";
}



function callback(){
if(xmlHttp.readyState==4)
if(xmlHttp.status==200){
var name=xmlHttp.responseXML.getElementsByTagName("name");
//var name=xmlHttp.responseText;
alert(name);
setNames(name);

}else if(xmlHttp.status==204){
clearNames();
}
}


function setNames(the_names)
{
clearNames();
var size=the_names.length;
setOffsets();
var row,cell,txtNode;
for(var i=0;i<size&&i<10;i++){//如果超过十条记录只显示十条
var nextNode=the_names[i].firstChild.data;
row=document.createElement("tr");
cell=document.createElement("td");
cell.onmouseout=function(){this.className='mouseOver';};
cell.onmouseover=function(){this.className='mouseOut';};
cell.setAttribute("bgcolor","#fffafa");
cell.setAttribute("border","0");
cell.onclick=function(){
populateName(this);
}
txtNode=document.createTextNode(nextNode);
cell.appendChild(txtNode);
row.appendChild(cell);
nameTableBody.appendChild(row);

}
alert(nameTableBody);
}


function setOffsets(){
var end=inputField.offsetWidth;
var left=calculateOffsetLeft(inputField);
var top=calculateOffsetTop(inputField)+inputField.offsetHeight;
completeDiv.style.border="black 1px solid";
completeDiv.style.left=left+"px";
completeDiv.style.top=top+"px";
nameTable.style.width=end+"px";
}



function calculateOffsetLeft(field){
return calculateOffset(field,"offsetLeft");
}


function calculateOffsetTop(field){
return calculateOffset(field,"offsetTop");
}


function calculateOffset(field,attr){
var offset=0;
while(field){
offset+=field[attr];
field=field.offsetParent;
}
return offset;
}



function populateName(cell){
inputField.value=cell.firstChild.nodeValue;
clearNames();
}
</script>



<!--这里是css代码-->
<style text/css>
.mouseOut{
background:#708090;
color:#fffafa;
}
.mouseOver{
background:#fffafa;
coor:#000000;
}
</style>
</head>




<body>
<h1>Ajax自动提示功能</h1>
名称:<input type="text" size="20" id="names" onkeyup="findNames();" style="height:20" />
<div style="position:absolute" id="popup">
<table id="name_table" bgcolor="#fffafa" border="0" cellpadding="0">
<tbody id="name_table_body"></tbody>
</div>
</body>



另外一个页面是这样的
<%
response.setHeader("content-Type","text/xml");
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", -10);

%>
<html>
<head>
<title>测试页面</title>
</head>
<body>
<%
//String name=request.getParameter("names");
String name="a";
if(name.equals("a")){
String data="<response><name>abc</name><name>ajax</name><name>apple</name><name>an</name></response>";
out.println(data);
}
else if(name.equals('j'))
{
String data="<response><name>java</name><name>jsp</name><name>javascript</name><name>jar</name></response>";
out.println(data);
}
%>

</body>

</html>


大家帮我啊~~跪求~~
...全文
115 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ronniegxq 2010-08-06
  • 打赏
  • 举报
回复
xmlHttp.responseXML.getElementsByTagName返回的是一个节点集合。不能直接使用的
root_lee 2010-08-05
  • 打赏
  • 举报
回复
getElementsByTagName("name"); 获取的是对象的集合,所以alert出来的是object
hoojo 2010-08-05
  • 打赏
  • 举报
回复

for(var i=0;i<size&&i<10;i++){//如果超过十条记录只显示十条
var nextNode=the_names[i].firstChild.nodeValue;
alert(nextNode);
.....
genguyige 2010-08-05
  • 打赏
  • 举报
回复
我用alert调试了呀 可是得到的就是[object] 在第一个页面里得到的数据 用的就是alert 而用xmlHttp.responseText可以得到得就是整个字符串,但是用另外一个就不行 这到底是什么原因呢? 高手帮我~~~
gouxiongyaya 2010-08-05
  • 打赏
  • 举报
回复
while(field){
offset+=field[attr];
field=field.offsetParent;
}
这句子里的field传过来的是<input type="text" size="20" id="names" onkeyup="findNames();" style="height:20" />的值,while通常不是用来判断true或false吗

兼哲 2010-08-04
  • 打赏
  • 举报
回复
別用alert調試
孟子E章 2010-08-04
  • 打赏
  • 举报
回复
xmlHttp.responseXML.getElementsByTagName返回的是一个节点集合。不能直接使用的
你需要循环得到每一个值

52,797

社区成员

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

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