Este artículo analiza la interacción entre Ajax y servlet en forma de ejemplos, y hay comentarios más detallados en el código para ayudar a todos a leer y comprender. El método de implementación específico es el siguiente:
1.Parte de JavaScript
var req /*Enviar parámetros a ajaxServlet mediante transmisión asincrónica de XMLHTTP y devolver documentos XML calificados*/ var url; function getResult() { var f=document.getElementById("form_pub"); ; //Obtener una referencia al texto en select if (window.XMLHttpRequest) { req = new XMLHttpRequest(); url = "ajaxServlet?action="+key+"&bm=UTF-8"; }else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); "+clave+"&bm=gbk"; } if(req) { req.open("GET",url, true); req.setRequestHeader("Content-Type", "text/html;charset=UTF-8"); // Si el encabezado no se establece aquí, hará que firfox envíe datos incorrectamente y los parámetros recibidos por el servlet ser confuso en IE Medium req.onreadystatechange = complete; req.send(null); //req.setRequestHeader("Content-Type", "text/xml; charset=UTF-8"); } } /*Analizar el documento XML devuelto*/ function complete(){ if (req.readyState == 4) { if (req.status == 200) { var items=document.getElementById ("pertenecer"); // El siguiente es el documento XML devuelto al analizar var xmlDoc = req.responseXML; Node=xmlDoc.getElementsByTagName("type_name"); //var str=new Array(); var str=null; //Borrar elementos de trabajo.innerHTML="" //Eliminar todo el contenido en un select for(var i = 0;i<Nodo.longitud;i++) { str=Nodo[i]; //alert(str.childNodes[0].nodeValue); objectOption=document.createElement("option"); items.options.add(objectOption); //firfox no admite internalText y debe reemplazarse por textContent if (window.ActiveXObject) {objectOption.innerText=str.childNodes[0] .nodeValue; } más {objectOption.textContent=str.childNodes[0].nodeValue;} } } } }
2.Lado del servlet:
paquete ajax;importar java.io.IOException;importar java.io.PrintWriter;importar javax.servlet.ServletException;importar javax.servlet.http.HttpServlet;importar javax.servlet.http.HttpServletRequest;importar javax.servlet.http.HttpServletResponse ;importar Data_GetConn.GetConn;//Este paquete lo escribí yo. Para obtener la referencia a mysql, importe java.sql.*;//¡Este paquete debe tenerlo! ! public class ajaxServlet extends HttpServlet{ //private static final String CONTENT_TYPE = "text/xml; charset=UTF-8";//Es mejor usar UTF-8 para codificar aquí public void init() throws ServletException{} public void doGet (solicitud HttpServletRequest, respuesta HttpServletResponse) arroja ServletException, IOException { Response.setContentType("text/xml; charset=UTF-8"); // Las dos oraciones siguientes son para cancelar el caché local. Response.setHeader("Cache-Control", "no-cache"); "Pragma", "sin caché"); PrintWriter out = respuesta.getWriter(); String action = request.getParameter("action"); request.getParameter("bm"); if(("gbk").equals(bm)) { action=new String(action.getBytes("ISO-8859-1"),"gbk");//obtendrá ¡Los datos se vuelven a codificar con gbk! (Gracias al profesor Dong Wei) } else { action=new String(action.getBytes("ISO-8859-1"),"gbk"); pruebe { GetConn wq=new GetConn(); ( ); Declaración stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("seleccione elementos de la clase donde main='"+action+"'"); StringBuffer sb = nuevo StringBuffer(); sb.append("<tipo>"); while(rs.next()) { sb.append("<tipo_nombre>"+rs .getString(1)+"</type_name>"); } //sb.append("<type_name>"+action+"</type_name>"); sb.append("</type>"); out.write(sb.toString());// Tenga en cuenta la salida del flujo a jsp aquí, el método de interceptación out.close(); ; con.close(); } captura (excepción ex) { } }}