首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

ajax删除时总是删除最后一个记录,什么有关问题

2012-03-31 
ajax删除时总是删除最后一个记录,什么问题 - Web 开发 / Ajax页面代码如下HTML code%@ page languageja

ajax删除时总是删除最后一个记录,什么问题 - Web 开发 / Ajax
页面代码如下

HTML code
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%    String path = request.getContextPath();    String basePath = request.getScheme() + "://"            + request.getServerName() + ":" + request.getServerPort()            + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>    <head>        <base href="<%=basePath%>">        <title>My JSP 'MyAjax.jsp' starting page</title>        <meta http-equiv="pragma" content="no-cache">        <meta http-equiv="cache-control" content="no-cache">        <meta http-equiv="expires" content="0">        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">        <meta http-equiv="description" content="This is my page">        <!--    <link rel="stylesheet" type="text/css" href="styles.css">    -->        <script type="text/javascript">    var request;        function createRequest()    {        if(window.ActiveXObject)        {                try{                request=new ActiveXObject("Msxml2.XMLHTTP");            }catch(e){                request=new ActiveXObject("Microsoft.XMLHTTP");            }        }else if(window.XMLHttpRequest){            request=new XMLHttpRequest();        }    }        function sendRequest()    {        createRequest();        var url="servlet/ajaxTest1";        request.open("GET",url,true);                request.onreadystatechange=processResponse;                request.send(null);    }        function processResponse()    {                if(request.readyState==4)        {            if(request.status==200)            {                            Display();            }        }else             {                            }    }        function Display()    {            var num=request.responseXML.getElementsByTagName("num")[0].firstChild.nodeValue;                for(var i=0;i<num;i++)        {            var id=request.responseXML.getElementsByTagName("id")[i].firstChild.nodeValue;                        var name=request.responseXML.getElementsByTagName("name")[i].firstChild.nodeValue;            var tbody=document.getElementById("content");            var tr=document.createElement("tr");            tr.setAttribute("id",id);            var td1=document.createElement("td");            td1.appendChild(document.createTextNode(id));            tr.appendChild(td1);            var td2=document.createElement("td");            td2.appendChild(document.createTextNode(name));            tr.appendChild(td2);            var delbtn=document.createElement("input");            delbtn.setAttribute("type","button");            delbtn.setAttribute("value","delete");            delbtn.setAttribute("id","btn"+id);                        delbtn.onclick=function(){delContent(id);};            var td3=document.createElement("td");            td3.appendChild(delbtn);            tr.appendChild(td3);            document.getElementById("content").appendChild(tr);                    }    }        function delContent(id)    {                createRequest();                var url="servlet/ajaxTest1?action=delete&id="+id;        request.onreadystatechange=deleteChange;        request.open("GET",url,true);        request.send(null);    }        function deleteChange()    {        if(request.readystate==4)        {            if(request.status==200)            {                                deleteRow();            }        }    }        function deleteRow()    {        var delID=request.responseXML.getElementsByTagName("delid")[0].firstChild.nodeValue;        alert(delID);        if(delID!=null)        {            var row=document.getElementById(delID);            document.getElementById("content").removeChild(row);        }    }    </script>    </head>    <body onload="sendRequest();">        <table>            <tr>                <td id="id"></td>                <td id="name"></td>            </tr>            <tbody id="content">                        </tbody>        </table>        <br><br>    </body></html> 




servlet程序如下
Java code
package test;import java.io.IOException;import java.io.PrintWriter;import java.sql.*;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ajaxTest1 extends HttpServlet {    /**     * Constructor of the object.     */    public ajaxTest1() {        super();    }    /**     * The doGet method of the servlet.  <br>     *     * This method is called when a form has its tag value method equals to get.     *      * @param request the request send by the client to the server     * @param response the response send by the server to the client     * @throws ServletException if an error occurred     * @throws IOException if an error occurred     */    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/xml; charset=UTF-8");        response.setHeader("Cache-Control", "no-cache");        PrintWriter out = response.getWriter();        request.setCharacterEncoding("GBK");        response.setCharacterEncoding("GBK");        String action=request.getParameter("action");        String id=request.getParameter("id");        out.print("<response>");                try {            Class.forName("com.mysql.jdbc.Driver");            Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/webdb?chatacterEncoding=GB2312","root","1234");            if(action!=null && id!=null)            {                PreparedStatement pstm=conn.prepareStatement("delete from t_message where id=?");                pstm.setInt(1, Integer.valueOf(id));                int count=pstm.executeUpdate();                out.print("<delid>"+id+"</delid>");                                        }else{                Statement st=conn.createStatement();                ResultSet rs=st.executeQuery("select * from t_message");                                int row=0;                while(rs.next())                {                                        out.print("<id>"+rs.getString(1)+"</id>");                    out.print("<name>"+rs.getString(2)+"</name>");                    row++;                }                out.print("<num>"+row+"</num>");            }        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        out.print("</response>");        out.flush();        out.close();    }    /**     * The doPost method of the servlet. <br>     *     * This method is called when a form has its tag value method equals to post.     *      * @param request the request send by the client to the server     * @param response the response send by the server to the client     * @throws ServletException if an error occurred     * @throws IOException if an error occurred     */    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html");        PrintWriter out = response.getWriter();        out                .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");        out.println("<HTML>");        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");        out.println("  <BODY>");        out.print("    This is ");        out.print(this.getClass());        out.println(", using the POST method");        out.println("  </BODY>");        out.println("</HTML>");        out.flush();        out.close();    }} 



[解决办法]
事件处理传递的闭包没处理,这样每次传递进delbtn.onclick=function(){delContent(id);};事件的ID值都是最后一个的,改成下面的

JScript code
delbtn.onclick=(function(id){return function(){delContent(id);}})(id);//=========== 

热点排行