DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> 注冊頁面中使用AJAX即時提醒用戶能否注冊成功
注冊頁面中使用AJAX即時提醒用戶能否注冊成功
編輯:AJAX詳解     

暈呼呼的看了2天AJax初級教程,為將要做的論壇的注冊頁面加寫技術進去...
AJax實際上是在JavaSCRIPT向後台的SERVLET發送消息,然後從SERVLET的響應中獲取消息。這裡提供
一個簡單的注冊頁面提醒用戶注冊名是否存在。
yemian.Html:
<Html>.....<script type="text/Javascript">
 var xmlHttp;   //定義一個XMLHttpRequest對象,用來發送,提取消息(如想SERVLET後台程序發送)
  function createXMLHttpRequest(){   //初始化
  if(window.ActiveXObject){   //IE浏覽器
   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else if(window.XMLHttpRequest){  //Mozilla 浏覽器
   xmlHttp = new XMLHttpRequest();
  }
 }
 function checkInfo(){  //HTML響應函數,一般Html中輸入什麼東西發生變化調用次函數
  createXMLHttpRequest();  //生成XMLHttpRequest對象
  var date = document.getElementById("userName");
  var url = "zhuceyemian?userName=" + escape(date.value);
//第一個參數為方法,第二個參數為服務器路徑名/還有其他的參數,第3個為是否異步,一般來說AJax是異步
  XMLHttp.open("GET", url, true);  
  XMLHttp.onreadystatechange = handleStateChange;  //徽調函數
  XMLHttp.send(null);
 }
 function handleStateChange() {
     if(XMLHttp.readyState == 4) { //判斷對象
         if(XMLHttp.status == 200) { //信息返回,處理信息。這裡就可以即時驗證輸入是否為正確了
             var mes = xmlHttp.responseXML.getElementsByTagName("message")[0].firstChild.data;
             var val = xmlHttp.responseXML.getElementsByTagName("passed")[0].firstChild.data;
             setMessage(mes, val);
         }
     }
 }
 function setMessage(message, isValid){
  var messageArea = document.getElementById("nameMessage");
  var fontColor = "red";
  if(isValid == "true"){
   fontColor = "green";
  }
  messageArea.innerHtml = "<font color=" +fontColor + ">" + message + "</font>";
 }
</script></head>
<!-- 將chenckInfo()賦予onchange就是說當文本域裡面發生變化時,就會調用上面那些函數,向SERVLET發
送消息,在後台SERVLET接受到消息後會查詢數據庫,已驗證當前輸入用戶名是否已被注冊,在<div>區域裡
AJax會填加提示信息->
  用戶名:<input id="userName" type="text" maxlength="10" />
 <div id="nameMessage"></div>
.... </Html>
在SERVLET裡面的代碼如下:zhuceyemian.Java
import Java.io.*;
import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Javax.servlet.*;
import Javax.servlet.http.*;
import Java.sql.*;
/* zhuceyemian.Java
 *   後台servlet程序,用來檢測注冊用戶名字是否已被注冊,提醒用戶
 */
public class zhuceyemian extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        boolean passed = validateName(request.getParameter("userName"));
        response.setContentType("text/XML");
        response.setCharacterEncoding("gb2312");
        response.setHeader("Cache-Control", "no-cache");
        String message = "this name is unavilable.";
        if (passed) {
            message = "this name is avilable.";
        }
        out.println("<response>");
        out.println("<passed>" + Boolean.toString(passed) + "</passed>");
        out.println("<message>" + message + "</message>");
        out.println("</response>");
        out.close();
    }
   /**
    *  從數據庫中查找是否用戶名已被注冊
    */
   private boolean validateName(String name) {
        boolean isValid = true;
       
        try {
            String driver = "com.MySQL.jdbc.Driver";
            Class.forName( driver );  //裝載驅動
            String url = "jdbc:MySQL://localhost/test";
            Connection conn = DriverManager.getConnection( url, "", "" );             //連接數據庫
            Statement stmt = conn.createStatement();
            stmt.executeQuery("use test");
            ResultSet rs = stmt.executeQuery("SELECT name  FROM useinfo where name=\"" + name + "\"");
            
            if(rs.next())
            {
             isValid = false;
            }
            rs.close();
            stmt.close();
            conn.close();
          }
          catch( Exception x ) {
            x.printStackTrace();
          }
        return isValid;
   }
}
在AJax向SERVLET發送請求的第2個參數url在這裡是 zhuceyemian?userName=....這裡zhuceyemian是服務器
名字,在XML裡面要降服務器名和CLASS所在路徑要影射
 <servlet>
  <servlet-name>zhuceyemian</servlet-name>
  <servlet-class>zhuceyemian</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>zhuceyemian</servlet-name>
  <url-pattern>/zhuceyemian</url-pattern>
 </servlet-mapping>
最後...也是最惡心的地方,讓我郁悶了2天,就是在SERVLET裡面連接數據庫的時候開始他說找不到驅動....郁悶
了,我用APPLICATION都能連接數據庫,最後終於發現在SERVLET下必須把一個MySQL-connector-Java-3.1.10-bin.jar的包打在WEB-INF/LIB下面,直接從BUILD下引入死活就說找不到。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved