ajax删除时总是删除最后一个记录,什么问题 - Web 开发 / Ajax
页面代码如下
<%@ 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>
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(id){return function(){delContent(id);}})(id);//===========