تحلل هذه المقالة التفاعل بين Ajax وservlet في شكل أمثلة، وهناك تعليقات أكثر تفصيلاً في الكود لمساعدة الجميع على القراءة والفهم. طريقة التنفيذ المحددة هي كما يلي:
1. جزء جافا سكريبت
var req / * إرسال المعلمات إلى ajaxServlet من خلال النقل غير المتزامن لـ XMLHTTP وإرجاع مستندات XML المؤهلة * / var url function getResult() { var f=document.getElementById("form_pub"); // احصل على مرجع للنص في التحديد if (window.XMLHttpRequest) { req = new XMLHttpRequest(); url = "ajaxServlet?action="+key+"&bm=UTF-8"; "+key+"&bm=gbk"; } if(req) { req.open("GET",url, true); req.setRequestHeader("Content-Type", "text/html;charset=UTF-8"); // إذا لم يتم تعيين الرأس هنا، فسيؤدي ذلك إلى إرسال firfox للبيانات بشكل غير صحيح، وستقوم المعلمات التي يتلقاها servlet بذلك يكون مشوشًا في IE Medium req.onreadystatechange = Complete req.send(null); charset=UTF-8"); } } /*تحليل مستند XML الذي تم إرجاعه*/ function Complete(){ if (req.readyState == 4) { if (req.status == 200) { var items=document.getElementById ("ينتمي")؛ // فيما يلي مستند XML الذي تم إرجاعه عن طريق التحليل var xmlDoc = req.responseXML; Node=xmlDoc.getElementsByTagName("type_name"); //var str=new Array(); var str=null; 0;i<Node. length;i++) { str=Node[i]; //alert(str.childNodes[0].nodeValue); objectOption=document.createElement("option"); items.options.add(objectOption); //firfox لا يدعم النص الداخلي ويجب استبداله بـ textContent if (window.ActiveXObject) {objectOption.innerText=str.childNodes[0] .nodeValue; } else {objectOption.textContent=str.childNodes[0].nodeValue;} } } } }
2. جانب الخدمة:
حزمة اياكس;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse ؛يستورد Data_GetConn.GetConn;// تمت كتابة هذه الحزمة بنفسي للحصول على مرجع إلى mysql، قم باستيراد java.sql.*;// يجب أن تحتوي هذه الحزمة على هذه! ! public class ajaxServlet Extends HttpServlet{ // سلسلة نهائية ثابتة خاصة CONTENT_TYPE = "text/xml; charset=UTF-8";// من الأفضل استخدام UTF-8 للتشفير هنا public void init() throws ServletException{} public void doGet (طلب HttpServletRequest، استجابة HttpServletResponse) يطرح ServletException، IOException { Response.setContentType("text/xml; charset=UTF-8"); // الجملتان التاليتان لإلغاء ذاكرة التخزين المؤقت المحلية Response.setHeader("Cache-Control", "no-cache"); "Pragma"، "no-cache"); PrintWriter out = Response.getWriter(); String action = request.getParameter("action"); request.getParameter("bm"); if(("gbk").equals(bm)) { action=new String(action.getBytes("ISO-8859-1"),"gbk");//سوف تحصل على تتم إعادة تشفير البيانات باستخدام gbk! (شكرًا للمعلم دونغ وي) } else { action=new String(action.getBytes("ISO-8859-1"),"gbk" } حاول { GetConn wq=new GetConn(); ( ); main='"+action+"'"); StringBuffer sb = new StringBuffer(); sb.append("<type>"); while(rs.next()) { sb.append("<type_name>"+rs .getString(1)+"</type_name>" } //sb.append("<type_name>"+action+"</type_name>"); sb.append("</type>"); out.write(sb.toString());// لاحظ إخراج الدفق إلى jsp هنا، طريقة الاعتراض out.Close(); con.Close(); } Catch(Exception ex) { } }}