JonnyKan 发表于 2006-7-18 21:02

关于AJAX遇到的一个问题

  最近在研究AJAX,照着书根据自己需求写些代码,可就是运行不出想要的结果,这里是我写的一个简单的程序,不知道为什么达不到目的,请高人帮忙看看。就两个文件,一个jsp,一个servlet,我先把代码复制上去,再说我的疑问。谢谢了!

JonnyKan 发表于 2006-7-18 21:03

这些代码是JSP文件中的。<BR>&lt;%@ page language="java" contentType="text/html;charset=gb2312"%&gt;<BR>&lt;html&gt;<BR>&lt;head&gt;   <BR>&lt;title&gt;查看教师&lt;/title&gt;<BR>&lt;SCRIPT type="text/javascript"&gt;<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&gt;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&lt;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>&lt;/SCRIPT&gt;<BR>&lt;/head&gt; <BR>&lt;body&gt;<BR>&lt;FORM action="#" name="frm1" onsubmit="startXMLHttpRequest('/servlet/teaServlet')"&gt;<BR>    &lt;INPUT type="submit" name="btn1" value="查看所有教师"&gt;<BR>&lt;/FORM&gt;<BR>&lt;!-- &lt;FORM action="seeTeacher.jsp" name="frm2"&gt;<BR>    &lt;INPUT type="text" name="tname"&gt;<BR>    &lt;INPUT type="submit" name="btn2" value="查看"&gt;<BR>&lt;/FORM&gt;--&gt;<BR>&lt;SPAN&gt;所有教师信息:&lt;/SPAN&gt;<BR>&lt;BR&gt;<BR>&lt;TABLE id="tResult"&gt;<BR>    &lt;TBODY id="tResultBody"&gt;<BR>    <BR>    &lt;/TBODY&gt;<BR>&lt;/TABLE&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;<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("&lt;response&gt;");<BR>            out.println("&lt;message&gt;");<BR>                out.println("&lt;teaName&gt;Jonny&lt;/teaName&gt;");<BR>                out.println("&lt;teaPass&gt;34&lt;/teaPass&gt;");<BR>                out.println("&lt;teaRealName&gt;sdf&lt;/teaRealName&gt;");<BR>                out.println("&lt;teaDiscription&gt;afsd&lt;/teaDiscription&gt;");<BR>                out.println("&lt;/message&gt;");<BR>           out.println("&lt;message&gt;");<BR>                out.println("&lt;teaName&gt;Jonnasdfy&lt;/teaName&gt;");<BR>                out.println("&lt;teaPass&gt;3dsaf4&lt;/teaPass&gt;");<BR>                out.println("&lt;teaRealName&gt;sdasfdf&lt;/teaRealName&gt;");<BR>                out.println("&lt;teaDiscription&gt;aasdffsd&lt;/teaDiscription&gt;");<BR>           out.println("&lt;/message&gt;");<BR>        out.println("&lt;/response&gt;");<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]

编程论坛