在用戶注冊時,我們經常需要檢查用戶名是否存在,本文就是實現無刷新驗證用戶名
打開開發環境VS 2005,新建項目(或打開現有項目),新建一個Web窗體,命名為 Default.aspx
代碼如下:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title>無標題頁</title>
- <script type="text/javascript"><!--
- var xmlHttp=null;
-
- function createXMLHttpRequest()
- {
- if(xmlHttp == null){
- if(window.XMLHttpRequest) {
- //Mozilla 浏覽器
- xmlHttp = new XMLHttpRequest();
- }else if(window.ActiveXObject) {
- // IE浏覽器
- try {
- xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
- } catch (e) {
- try {
- xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
- } catch (e) {
- //alert('創建失敗');
- }
- }
- }
- }
- }
- function openAjax()
- {
- if( xmlHttp == null)
- {
- createXMLHttpRequest();
- if( xmlHttp == null)
- {
- //alert('出錯');
- return ;
- }
- }
-
- var val=document.getElementById('txt').value;
-
- xmlHttp.open("get","VerifyUserNameHandler.ashx?para="+val+"&date="+new Date(),true);
- xmlHttp.onreadystatechange=xmlHttpChange;
- xmlHttp.send(null);
-
- document.getElementById('resultSpan').innerHTML='正在檢查,請稍候...';
- }
-
- function xmlHttpChange()
- {
- if(xmlHttp.readyState==4)
- {
- if(xmlHttp.status==200)
- {
- var res=xmlHttp.responseText;
- document.getElementById('resultSpan').innerHTML=res;
-
- if(res=='恭喜,用戶名可以使用。')
- {
- setTimeout("document.getElementById('resultSpan').innerHTML='';",2000);
- }
- else if(res=='抱歉,用戶名已被使用。')
- {
- document.getElementById('txt').focus();
- }
- }
- }
- }
- // --></script>
- </head>
- <body>
- <form id="form1" runat="server">
- 用戶名:<input type="text" id='txt' value="Sandy" onblur="openAjax();" /> <span id="resultSpan"></span>
- </form>
- </body>
- </html>
然後新建一個一般處理程序,命名為 VerifyUserNameHandler.ashx
代碼如下:
- <%@ WebHandler Language="C#" Class="VerifyUserNameHandler" %>
- using System;
- using System.Web;
- using System.Collections;
- using System.Collections.Generic;
- public class VerifyUserNameHandler : IHttpHandler {
-
- public void ProcessRequest (HttpContext context) {
- //context.Response.ContentType = "text/plain";
- string _name = context.Request.QueryString["para"];
- _name = string.IsNullOrEmpty(_name) ? "" : _name;
- System.Threading.Thread.Sleep(3000);//用線程來模擬數據庫查詢工作
- string[] Names = new string[] { "Sandy", "阿非", "abc" };//這裡用Names數組來代替數據庫中的結果集
- if (Array.IndexOf<string>(Names, _name) == -1)
- {
- context.Response.Write("恭喜,用戶名可以使用。");
- }
- else
- {
- context.Response.Write("抱歉,用戶名已被使用。");
- }
- }
-
- public bool IsReusable {
- get {
- return false;
- }
- }
- }
到這裡程序已經完成。
主要是利用了XMLHttpRequest對象采用異步的方式去訪問服務器,獲得響應後觸發定義好的回調函數
本文是XMLHttpRequest對象異步方式對服務器發送Get方式的請求,訪問服務器的文件為.ashx