注册 登录
编程论坛 jQuery论坛

关于AJAX遇到的一个问题

JonnyKan 发布于 2006-07-18 21:02, 1510 次点击
  最近在研究AJAX,照着书根据自己需求写些代码,可就是运行不出想要的结果,这里是我写的一个简单的程序,不知道为什么达不到目的,请高人帮忙看看。就两个文件,一个jsp,一个servlet,我先把代码复制上去,再说我的疑问。谢谢了!
5 回复
#2
JonnyKan2006-07-18 21:03
这些代码是JSP文件中的。
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>查看教师</title>
<SCRIPT type="text/javascript">
var xmlHttp;
//创建XMLHttpRequest对象
function createXMLHttpRequest()
{
if(window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}

//向服务器发送请求
function startXMLHttpRequest(url)
{
alert(url);
createXMLHttpRequest();
xmlHttp.onreadystatechange = doXMLHttpRequest;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}

//响应请求
function doXMLHttpRequest()
{
if(xmlHttp.readyState == 4)
{
if(xmlHttp.status == 200)
{
alert("a");
clearPreviousResults();
parseResults();
}
}
}

//清除
function clearPreviousResults()
{
var tableBody = document.getElementById("tResult");
while(tableBody.childNodes.length>0)
{
tableBody.removeChild(tableBody.childNodes[0]);
}
alert("b");
}

//响应
function parseResults()
{
var result = null;
var teaName = "";
var teaPass = "";
var teaRealName = "";
var teaDiscription = "";
alert("c");
var messages = xmlHttp.responseXML.getElementsByTagName("message");
var len = messages.length;
for(var i = 0;i<len;i++)
{
alert("d");
result = messages[i];
teaName = result.getElementsByTagName("teaName")[0].firstChild.nodeValue;
teaPass = result.getElementsByTagName("teaPass")[0].firstChild.nodeValue;
teaRealName = result.getElementsByTagName("teaRealName")[0].firstChild.nodeValue;
teaDiscription = result.getElementsByTagName("teaDiscription")[0].firstChild.nodeValue;
addTableRow(teaName,teaPass,teaRealName,teaDiscription);
}
}

//动态建立表格
function addTableRow(teaName,teaPass,teaRealName,teaDiscription)
{
var row = document.createElement("tr");
var cell = createCellWithText(teaName);
row.appendChild(cell);

cell = createCellWithText(teaPass);
row.appendChild(cell);

cell = createCellWithText(teaRealName);
row.appendChild(cell);

cell = createCellWithText(teaDiscription);
row.appendChild(cell);

document.getElementById("tResultBody").appendChild(row);
}

//建立列
function createCellWithText(text)
{
var cell = document.createElement("td");
var textNode = documnet.createTextNode(text);
cell.appendChild(textNode);
return cell;
}
</SCRIPT>
</head>
<body>
<FORM action="#" name="frm1" onsubmit="startXMLHttpRequest('/servlet/teaServlet')">
<INPUT type="submit" name="btn1" value="查看所有教师">
</FORM>
<!-- <FORM action="seeTeacher.jsp" name="frm2">
<INPUT type="text" name="tname">
<INPUT type="submit" name="btn2" value="查看">
</FORM>-->
<SPAN>所有教师信息:</SPAN>
<BR>
<TABLE id="tResult">
<TBODY id="tResultBody">

</TBODY>
</TABLE>
</body>
</html>
#3
JonnyKan2006-07-18 21:04

然后是请求的资源,teaServlet的代码

package admin;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class teaServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public teaServlet() {
super();
}

public void destroy() {
super.destroy();
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setContentType("text/xml");
PrintWriter out = response.getWriter();
out.println("<response>");
out.println("<message>");
out.println("<teaName>Jonny</teaName>");
out.println("<teaPass>34</teaPass>");
out.println("<teaRealName>sdf</teaRealName>");
out.println("<teaDiscription>afsd</teaDiscription>");
out.println("</message>");
out.println("<message>");
out.println("<teaName>Jonnasdfy</teaName>");
out.println("<teaPass>3dsaf4</teaPass>");
out.println("<teaRealName>sdasfdf</teaRealName>");
out.println("<teaDiscription>aasdffsd</teaDiscription>");
out.println("</message>");
out.println("</response>");
System.out.println("成功");
out.flush();
out.close();
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}

public void init() throws ServletException {
// Put your code here
}

}

#4
JonnyKan2006-07-18 21:08
我在JavaScript里的函数里放过一些alert()来测试这些函数有没有执行。发现有个问题。
1.doXMLHttpRequest()这个方法中如果加了if(xmlHttp.status == 200)这个判断,里面的代码就永远没有被执行。
2.然后我删除了这个条件,再进行测试,发现建立parseResults()中的循环没有被执行,也就是动态建立表格的代码没有被执行。我自己查了下,可能的原因是没找到servlet资源,或者是别的。请大家帮忙看看。
3.找不到资源文件,这是我现在遇到的最头疼的一个问题,不知道为什么,servelt和xml试写过很多种路径,都没找到。

请大家帮忙看看,谢谢!
#5
atang02412006-07-25 16:06

#6
dreame2006-07-28 17:02
可能是服务端没有正确响应!
response.setContentType("text/html");
response.setContentType("text/xml");
写下面这个就够了吧!
1