功能絕對實現了的.相容IE6、IE7、FF、Chrome
AjaxXMLServer的Servlet代碼如下:
package com.web;
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;
public class AjaxXMLServer extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
//響應的Content-Type必須是text/xml,因為在jquery中資料接收的格式為xml
response.setContentType("text/xml;charset=utf-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
//1、擷取參數
String userName=request.getParameter("userName");
//2、返回的資料類型拼裝成xml格式
StringBuilder builder=new StringBuilder();
builder.append("<message>");
if(userName==null || userName.length()==0){
builder.append("使用者名稱不可為空").append("</message>");
}else{
//3.校正操作
if(userName.equals("tfq")){
//返回給使用者提示資訊
builder.append("使用者名稱["+userName+"]已經存在,請重新輸入使用者名稱").append("</message>");
}else{
builder.append("使用者名稱["+userName+"]尚未被註冊,可以使用該使用者名稱").append("</message>");
}
out.println(builder.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/xml");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
doGet(request,response);
}
}
checkUserJquery.html檔案代碼如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'checkUser 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">
<script type="text/javascript" src="js/jquery-1.4.2.js" ></script>
<script type="text/javascript" src="js/myVlidate_jquery.js" ></script>
</head>
<body>
<center>
<br />
使用者名稱:<input type="text" id="userName" />
<input type="button" value="校正" onclick="validate()" />
<div id="showResult"></div>
</center>
</body>
</html>
myVlidate_jquery.js檔案代碼如下:
//驗證使用者是否存在
function validate() {
// 1擷取文字框的內容
// document.getElementById("userName"); dom的方式
// Jquery的尋找節點的方式,參數中#加上id屬性值可以找到一個節點
var obj = $("#userName");
var userName = obj.val();
//alert("userName: " + userName);
// 2將擷取到的內容發送給伺服器的servlet
// 調用jquery的XMLHTTPrequest對象get請求的封裝
//$.get("servlet/CheckUserName?userName=" + userName, null, callback);
//JS中定義一個簡單對象的格式
var jsObj={name:"123",age:30};
//使用jquery的XMLHTTPRequest對象get請求的封裝
$.ajax({
type:"POST", //http請求方式
url:"servlet/AjaxXMLServer", //發送給伺服器的url
data:"userName="+userName, //發送給伺服器的參數
dataType:"xml", //告訴JQUERY返回的資料格式(注意此處資料格式一定要與提交的servlet返回的資料格式一致,不然不會調用callback)
success:callback //定義互動完成,並且伺服器正確返回資料時調用回呼函數
});
}
// 回呼函數
function callback(data) {
// 3接收報務器返回的資料
//首先需要將data這個dom對象中的資料解析出來
var jqueryObj=$(data);
//擷取message節點
var message=jqueryObj.children();
//擷取常值內容
var text=message.text();
// 4把返回的資料在div中顯示
$("#showResult").html(text);
}
我在做此樣本時,不小心把AjaxXMLServer中返回jquery的資料格式弄成html了,怎樣調試都進不了callback.請大家注意一下servlet與query中返回的資料要一致就行了。