用JavaScript來創建XMLHttpRequest 類向服務器發送一個HTTP請求後,接下來要決定當收到服務器的響應後,需要做什麼。這需要告訴HTTP請求對象用哪一個JavaScript函數處理這個響應。可以將對象的onreadystatechange屬性設置為要使用的JavaScript的函數名,如下所示:XMLhttp_request.onreadystatechange =FunctionName;
FunctionName是用Javascript創建的函數名,注意不要寫成FunctionName(),當然我們也可以直接將JavaScript代碼創建在onreadystatechange之後。
我們調用request.open()-它用服務器打開套接字頻道,使用一個HTTP動詞(GET或POST)作為第一個參數並且以數據提供者的URL作為第二個參數request.open()的最後一個參數被設置為true-它指示該請求的異步特性。注意,該請求還沒有被提交。隨著對request.send()的調用,開始提交-這可以為POST提供任何必要的有效載荷。在使用異步請求時,我們必須使用request.onreadystatechanged屬性來分配請求的回調函數。(如果請求是同步的話,我們應該能夠在調用request.send之後立即處理結果,但是我們也有可能阻斷用戶,直到該請求完成為止。)
再看看數據提供者的URL,url = "/chkUserAndCom",servlet如下:
1/**//*
2 * Created on 2005-12-31
3 *
4 * TODO To change the template for this generated file go to
5 * Window - Preferences - Java - Code Style - Code Templates
6 */
7package com.event;
8
9import Javax.servlet.ServletException;
10import Javax.servlet.http.HttpServletRequest;
11import Javax.servlet.http.HttpServletResponse;
12
13import com.beans.EBaseInfo;
14
15/** *//**
16 * @author Alpha 2005-12-31
17 *
18 * <P>AJax 演示---企業注冊時檢查企業用戶名和企業名稱</P>
19 *
20 * TODO To change the template for this generated type comment go to
21 * Window - Preferences - Java - Code Style - Code Templates
22 */
23public class CheckUserAndComNm {
24 private String msgStr = "";
25 protected void doGet(HttpServletRequest request,HttpServletResponse response)
26 throws ServletException
27 {
28
29 EComBaseInfo info=new EComBaseInfo();
30 String oprate=request.getParameter("oprate")).trim();
31 String userName=request.getParameter("userName");
32 String passWord=request.getParameter("passWord");
33 String comName=request.getParameter("comName");
34
35 try
36 {
37 if(oprate.equals("chkUser"))
38 {
39 response.setContentType("text/Html;charset=GB2312");
40 if(userName.length()<5||userName.length()>20)
41 {
42 msgStr = "對不起,用戶名必須為字母、數字或下劃線,長度為5-20個字符!";
43 }
44 else
45 {
46 boolean bTmp=info.findUser(userName); //找查數據庫中有無該用戶名
47 if(bTmp)
48 msgStr ="對不起,此用戶名已經存在,請更換用戶名注冊!";
49 else
50 msgStr ="";
51 }
52 response.getWriter().write(msgStr);
53 }
54 else if(oprate.equals("chkCom"))
55 {
56 response.setContentType("text/Html;charset=GB2312");
57 if(comName.length()<6||comName.length()>100)
58 {
59 msgStr = "對不起,公司名稱長度為6-100個字符(不包括字符內的空格)!";
60 }
61 else
62 {
63 boolean bTmp=info.findCom(comName); //找查數據庫中有無該企業名
64 if(bTmp)
65 msgStr ="對不起,此企業名稱已經存在,請更換企業名稱注冊!";
66 else
67 msgStr ="";
68 }
69 response.getWriter().write(msgStr);
70
71 }
72 }
73 catch(Exception ex)
74 {
75 }
76 finally
77 {
78 request.setAttribute("url",url);
79 }
80 }
81
82 protected void doPost(HttpServletRequest request,HttpServletResponse response)
83 throws ServletException
84 {
85 doGet(request,response);
86 }
87}
88