JonnyKan 发表于 2006-7-18 21:02
关于AJAX遇到的一个问题
最近在研究AJAX,照着书根据自己需求写些代码,可就是运行不出想要的结果,这里是我写的一个简单的程序,不知道为什么达不到目的,请高人帮忙看看。就两个文件,一个jsp,一个servlet,我先把代码复制上去,再说我的疑问。谢谢了!
JonnyKan 发表于 2006-7-18 21:03
这些代码是JSP文件中的。<BR><%@ page language="java" contentType="text/html;charset=gb2312"%><BR><html><BR><head> <BR><title>查看教师</title><BR><SCRIPT type="text/javascript"><BR> var xmlHttp;<BR> //创建XMLHttpRequest对象<BR> function createXMLHttpRequest()<BR> {<BR> if(window.XMLHttpRequest)<BR> {<BR> xmlHttp = new XMLHttpRequest();<BR> }<BR> else if(window.ActiveXObject)<BR> {<BR> xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");<BR> }<BR> }<BR> <BR> //向服务器发送请求<BR> function startXMLHttpRequest(url)<BR> {<BR> alert(url);<BR> createXMLHttpRequest();<BR> xmlHttp.onreadystatechange = doXMLHttpRequest;<BR> xmlHttp.open("GET",url,true);<BR> xmlHttp.send(null);<BR> }<BR> <BR> //响应请求<BR> function doXMLHttpRequest()<BR> {<BR> if(xmlHttp.readyState == 4)<BR> {<BR> if(xmlHttp.status == 200)<BR> {<BR> alert("a");<BR> clearPreviousResults();<BR> parseResults();<BR> }<BR> }<BR> }<BR> <BR> //清除<BR> function clearPreviousResults()<BR> {<BR> var tableBody = document.getElementById("tResult");<BR> while(tableBody.childNodes.length>0)<BR> {<BR> tableBody.removeChild(tableBody.childNodes[0]);<BR> }<BR> alert("b");<BR> }<BR> <BR> //响应<BR> function parseResults()<BR> {<BR> var result = null;<BR> var teaName = "";<BR> var teaPass = "";<BR> var teaRealName = "";<BR> var teaDiscription = "";<BR> alert("c");<BR> var messages = xmlHttp.responseXML.getElementsByTagName("message");<BR> var len = messages.length;<BR> for(var i = 0;i<len;i++)<BR> {<BR> alert("d");<BR> result = messages[i];<BR> teaName = result.getElementsByTagName("teaName")[0].firstChild.nodeValue;<BR> teaPass = result.getElementsByTagName("teaPass")[0].firstChild.nodeValue;<BR> teaRealName = result.getElementsByTagName("teaRealName")[0].firstChild.nodeValue;<BR> teaDiscription = result.getElementsByTagName("teaDiscription")[0].firstChild.nodeValue;<BR> addTableRow(teaName,teaPass,teaRealName,teaDiscription);<BR> }<BR> }<BR> <BR> //动态建立表格<BR> function addTableRow(teaName,teaPass,teaRealName,teaDiscription)<BR> {<BR> var row = document.createElement("tr");<BR> var cell = createCellWithText(teaName);<BR> row.appendChild(cell);<BR> <BR> cell = createCellWithText(teaPass);<BR> row.appendChild(cell);<BR> <BR> cell = createCellWithText(teaRealName);<BR> row.appendChild(cell);<BR> <BR> cell = createCellWithText(teaDiscription);<BR> row.appendChild(cell);<BR> <BR> document.getElementById("tResultBody").appendChild(row);<BR> }<BR> <BR> //建立列<BR> function createCellWithText(text)<BR> {<BR> var cell = document.createElement("td");<BR> var textNode = documnet.createTextNode(text);<BR> cell.appendChild(textNode);<BR> return cell;<BR> }<BR></SCRIPT><BR></head> <BR><body><BR><FORM action="#" name="frm1" onsubmit="startXMLHttpRequest('/servlet/teaServlet')"><BR> <INPUT type="submit" name="btn1" value="查看所有教师"><BR></FORM><BR><!-- <FORM action="seeTeacher.jsp" name="frm2"><BR> <INPUT type="text" name="tname"><BR> <INPUT type="submit" name="btn2" value="查看"><BR></FORM>--><BR><SPAN>所有教师信息:</SPAN><BR><BR><BR><TABLE id="tResult"><BR> <TBODY id="tResultBody"><BR> <BR> </TBODY><BR></TABLE><BR></body><BR></html><BR>
JonnyKan 发表于 2006-7-18 21:04
<P>然后是请求的资源,teaServlet的代码<BR><BR>package admin;</P>
<P>import java.io.IOException;<BR>import java.io.PrintWriter;</P>
<P>import javax.servlet.ServletException;<BR>import javax.servlet.http.HttpServlet;<BR>import javax.servlet.http.HttpServletRequest;<BR>import javax.servlet.http.HttpServletResponse;</P>
<P>public class teaServlet extends HttpServlet {</P>
<P> private static final long serialVersionUID = 1L;</P>
<P> public teaServlet() {<BR> super();<BR> }</P>
<P> public void destroy() {<BR> super.destroy(); <BR> }</P>
<P> public void doGet(HttpServletRequest request, HttpServletResponse response)<BR> throws ServletException, IOException {<BR> response.setContentType("text/html");<BR> response.setContentType("text/xml");<BR> PrintWriter out = response.getWriter();<BR> out.println("<response>");<BR> out.println("<message>");<BR> out.println("<teaName>Jonny</teaName>");<BR> out.println("<teaPass>34</teaPass>");<BR> out.println("<teaRealName>sdf</teaRealName>");<BR> out.println("<teaDiscription>afsd</teaDiscription>");<BR> out.println("</message>");<BR> out.println("<message>");<BR> out.println("<teaName>Jonnasdfy</teaName>");<BR> out.println("<teaPass>3dsaf4</teaPass>");<BR> out.println("<teaRealName>sdasfdf</teaRealName>");<BR> out.println("<teaDiscription>aasdffsd</teaDiscription>");<BR> out.println("</message>");<BR> out.println("</response>");<BR> System.out.println("成功");<BR> out.flush();<BR> out.close();<BR> }</P>
<P> public void doPost(HttpServletRequest request, HttpServletResponse response)<BR> throws ServletException, IOException {<BR> doGet(request,response);<BR> }</P>
<P> public void init() throws ServletException {<BR> // Put your code here<BR> }</P>
<P>}<BR></P>
JonnyKan 发表于 2006-7-18 21:08
我在JavaScript里的函数里放过一些alert()来测试这些函数有没有执行。发现有个问题。<BR>1.doXMLHttpRequest()这个方法中如果加了if(xmlHttp.status == 200)这个判断,里面的代码就永远没有被执行。<BR>2.然后我删除了这个条件,再进行测试,发现建立parseResults()中的循环没有被执行,也就是动态建立表格的代码没有被执行。我自己查了下,可能的原因是没找到servlet资源,或者是别的。请大家帮忙看看。<BR>3.找不到资源文件,这是我现在遇到的最头疼的一个问题,不知道为什么,servelt和xml试写过很多种路径,都没找到。<BR><BR>请大家帮忙看看,谢谢!
atang0241 发表于 2006-7-25 16:06
<P>[em09]</P>
dreame 发表于 2006-7-28 17:02
可能是服务端没有正确响应!<BR><FONT color=#ff0000>response.setContentType("text/html");<BR>response.setContentType("text/xml");<BR></FONT>写下面这个就够了吧!<BR>
页:
[1]