• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

    Ajax注冊用戶時實現(xiàn)表單驗證

    來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:52:00
    文檔

    Ajax注冊用戶時實現(xiàn)表單驗證

    Ajax注冊用戶時實現(xiàn)表單驗證:很多時候在網(wǎng)站上注冊時,我們會發(fā)現(xiàn),注冊表單通常需要檢查用戶名和電子郵件地址的可用性;從而確保用戶之間不擁有相同的用戶名和電子郵件地址;一些網(wǎng)站喜歡在用戶提交填寫的用戶信息時,做信息可用性的檢查,而一些網(wǎng)站會做實時的用戶名和電子郵件地址可用
    推薦度:
    導(dǎo)讀Ajax注冊用戶時實現(xiàn)表單驗證:很多時候在網(wǎng)站上注冊時,我們會發(fā)現(xiàn),注冊表單通常需要檢查用戶名和電子郵件地址的可用性;從而確保用戶之間不擁有相同的用戶名和電子郵件地址;一些網(wǎng)站喜歡在用戶提交填寫的用戶信息時,做信息可用性的檢查,而一些網(wǎng)站會做實時的用戶名和電子郵件地址可用

    很多時候在網(wǎng)站上注冊時,我們會發(fā)現(xiàn),注冊表單通常需要檢查用戶名和電子郵件地址的可用性;從而確保用戶之間不擁有相同的用戶名和電子郵件地址;一些網(wǎng)站喜歡在用戶提交填寫的用戶信息時,做信息可用性的檢查,而一些網(wǎng)站會做實時的用戶名和電子郵件地址可用性檢查,例如:“用戶名”文本框失去焦點時;就用戶體驗來說,實時的用戶信息檢查用戶體驗效果更好,而不是在表單提交后,告訴用戶信息不符合系統(tǒng)要求。

    下面截圖是新浪微博的注冊界面,它采用的是實時的用戶信息檢查,如:手機(jī)號碼和用戶名等信息。

    圖1新浪微博注冊表單

    1、正文

    假設(shè),現(xiàn)在要求我們實現(xiàn)一個注冊界面并且它采用實時方式檢查用戶信息是否符合系統(tǒng)的要求。

    其中,注冊界面包含:用戶名,郵件地址,密碼和微博地址等信息;實時檢查:當(dāng)文本框失去焦點時對信息進(jìn)行實時檢查,例如:“用戶名”文本框失去焦點時,觸發(fā)頁面發(fā)送Ajax請求,到數(shù)據(jù)庫中用戶是否可用,接著把查詢結(jié)果返回到前端頁面中。

    對于表單輸入檢查,我們將使用前一博文《自定義jQuery插件Step by Step》中,自定義表單信息檢查插件對輸入信息進(jìn)行檢查。

    圖2注冊驗證過程

    注冊表單設(shè)計
    現(xiàn)在,讓我們定義注冊表單,它包含:用戶名,郵件地址,密碼和微博地址等信息,由于時間的關(guān)系,我們已經(jīng)把注冊表單界面的定義好了,具體實現(xiàn)代碼如下:

    <body>
     <div id="Div1">
     <!-- Start Sign Up Form -->
     <form action="#signup-form" id="Form1">
     <h2>
     Sign Up</h2>
     <fieldset>
     <div class="fieldgroup">
     <label for="name">
     Name</label>
     <input class="form_element" type="text" name="name" validation="required nameAvailable" />
     <span class='availability_status'></span>
     </div>
     <div class="fieldgroup">
     <label for="email">
     Email</label>
     <input class="form_element" type="text" name="email" validation="email" />
     <span></span>
     </div>
     <div class="fieldgroup">
     <label for="password">
     Password</label>
     <input class="form_element" type="password" name="password" validation="password" />
     <span></span>
     </div>
     <div class="fieldgroup">
     <label for="weibo">
     Weibo</label>
     <input class="form_element" type="text" name="weibo" validation="url" />
     <span></span>
     </div>
     <div class="fieldgroup">
     <input type="submit" class="submit" value="Sign up">
     <span></span>
     </div>
     </fieldset>
     <div class="fieldgroup">
     <p>
     Already registered? <a >Sign in</a>.</p>
     </div>
     </form>
     <!-- End Sign Up Form -->
     </div>
    </body>
    

    上面,我們實現(xiàn)了注冊表單,它包含:用戶名,郵件地址,密碼和微博地址文本框,當(dāng)“用戶名”失去焦點時,發(fā)送Ajax請求實時檢查用戶名是否可用,并且動態(tài)地加載圖片表示檢查中和相應(yīng)的檢查結(jié)果。

    圖3注冊表單

    jQuery Validation插件
    現(xiàn)在,我們需要修改一下前一博文中定義的表單檢查控件,需要增加用戶名檢查和文本框失去焦點事件(blur event)。

    首先,我們在Validation類型中,增加用戶名檢查方法,由于用戶檢查是通過發(fā)送Ajax請求,然后到數(shù)據(jù)庫中查詢是否存在該用戶名來確定該用戶名是否可用。

    nameAvailable: {
     check: function(value) {
    
     if (value) {
     var dataString = 'username=' + value;
     var result;
    
     // Checking availability...
     // Loads checking image.
     $(".availability_status").html('<img src="loader.gif" align="absmiddle">');
     
     // Sends ajax request to check the name is available or not.
     $.ajax({
     type: "GET",
     url: "UserService.ashx",
     data: dataString,
     success: function(data) {
     
     // When the checking completed, then loaded corresponding css style.
     $('.availability_status').ajaxComplete(function(event, request, settings) {
     if (data == false) {
     $('.availability_status').html('');
     $('.availability_status').removeClass('tick');
     $('.availability_status').addClass('error');
     return true;
     }
     else {
     $('.availability_status').html('');
     $('.availability_status').removeClass('error');
     $('.availability_status').addClass('tick');
    
     return false;
     }
     });
    
     }
     });
    
     // Sends a asyn reqeust, return false temporary.
     return false;
     //// e.preventDefault();
     }
     else {
     $('.availability_status').removeClass('tick');
     $('.availability_status').removeClass('error');
     return false;
     }
     },
     msg: "",
     tip: "Should enter 4-30 characters, support letter, figures and _ or -"
    }
    
    

    上面,我們完成了在Validation類型中增加nameAvailable()方法,它通過發(fā)送異步Ajax請求來檢查用戶名是否可用,在檢查的過程中,在輸入框右邊動態(tài)地加載圖片來表示檢查中,當(dāng)檢查結(jié)束加載相應(yīng)的圖片表示用戶是否可用。

    接下來,我們將添加focus和blur事件,當(dāng)文本框得到焦點時觸發(fā)focus事件,提示輸入信息的要求,當(dāng)文本框失去焦點時觸發(fā)blur事件,發(fā)生實時Ajax請求,例如:檢查用戶名是否可用。

    由于,事件方法應(yīng)該是Field類型公開的方法,確實我們也不想為每個Field對象都定義自己事件方法,所以我們通過原型鏈的方式公開事件方法focus()和blur(),具體實現(xiàn)如下:

    // The prototype of Field type.
    Field.prototype = {
    
     // Public method.
     attach: function(event) {
    
     // The object refers to Field object.
     var obj = this;
     // When field lost focus, then invoked the validate method.
     if (event == "blur") {
     obj.field.bind("blur", function() {
     return obj.validate();
     });
     }
    
     // When field got focus, then invoked the hint method.
     if (event == "focus") {
     obj.field.bind("focus", function() {
     return obj.hint();
     });
     }
     }
    }
    
    

    我們給Field的原型鏈添加了事件響應(yīng)事件blur和focus,當(dāng)失去焦點時觸發(fā)Field的vlidate()方法,獲得焦點時觸發(fā)Field的hint()方法。

    數(shù)據(jù)表設(shè)計
    前面,我們提到注冊表單的用戶名可用性檢查設(shè)計是通過發(fā)送Ajax請求,然后到數(shù)據(jù)庫中查詢用戶名是否存在來確定用戶名的可用性。

    接下來,我們添加數(shù)據(jù)庫表jk_user用來存儲用戶信息,它包括用戶名、密碼(注意:這里沒有考慮隱私信息的加密存儲)、顯示名稱和注冊日期等,具體設(shè)計如下:

    -- =============================================
    CREATE TABLE [dbo].[jk_users](
     -- This is the reference to Users table, it is primary key.
     [ID] [bigint] IDENTITY(1,1) NOT NULL,
     [user_login] [varchar](60) NOT NULL,
     [user_pass] [varchar](64) NOT NULL,
     [user_nicename] [varchar](50) NOT NULL,
     [user_email] [varchar](100) NOT NULL,
     [user_url] [varchar](100) NOT NULL,
    
     -- This field get the default from function GETDATE().
     [user_registered] [datetime] NOT NULL CONSTRAINT [DF_jk_users_user_registered] DEFAULT (getdate()),
     [user_activation_key] [varchar](60) NOT NULL,
     [user_status] [int] NOT NULL CONSTRAINT [DF_jk_users_user_status] DEFAULT ((0)),
     [display_name] [varchar](250) NOT NULL
    )
     ajaxform2
    

    圖4數(shù)據(jù)表設(shè)計

    服務(wù)端設(shè)計
    前面,我們實現(xiàn)了用戶表的設(shè)計,由于注冊表單通過發(fā)送Ajax請求訪問服務(wù)器端公開的方法,然后通過該公開方法訪問數(shù)據(jù)庫。

    接下來,我們定義用戶表(jk_user)的數(shù)據(jù)庫訪問對象(DAO),它包含方法IsAvailableUser()用來檢查用戶名是否可用,具體的實現(xiàn)如下:

    /// <summary>
    /// The user dao manager.
    /// </summary>
    public class UserManager
    {
     private const string Query = "SELECT user_login, user_email, user_url FROM jk_users WHERE (user_login = @user_login)";
    
     /// <summary>
     /// Initializes a new instance of the <see cref="UserManager"/> class.
     /// </summary>
     public UserManager()
     {
     }
    
     /// <summary>
     /// Determines whether the user is available or not, with specified username.
     /// </summary>
     /// <param name="userName">Name of the user.</param>
     /// <returns>
     /// <c>true</c> if is available user; otherwise, <c>false</c>.
     /// </returns>
     public bool IsAvailableUser(string userName)
     {
     using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLCONN2"].ToString()))
     using (var com = new SqlCommand(Query, con))
     {
     // Pass user_login parameter to sql statement. 
     com.Parameters.Add("@user_login", SqlDbType.VarChar).Value = userName;
     com.Connection.Open();
     return !com.ExecuteReader().HasRows;
     }
     }
    }
    
    

    現(xiàn)在,我們完成了數(shù)據(jù)庫訪問對象UserManager,它包含方法IsAvailableUser()來檢查用戶是否可用,如果該用戶名已經(jīng)存在返回false,反之返回true。

    接下來,我們需要實現(xiàn)服務(wù)器端類UserService,讓客戶端通過它來調(diào)用UserManager中的IsAvailableUser()方法,首先我們創(chuàng)建一般處理程序(ASHX文件),實現(xiàn)ProcessRequest()方法,具體實現(xiàn)如下:

    /// <summary>
    /// The user availability check service.
    /// </summary>
    public class UserService : IHttpHandler
    {
     public void ProcessRequest(HttpContext context)
     {
     // Response json type.
     context.Response.ContentType = "application/json";
     context.Response.Charset = "utf-8";
    
     var manager = new UserManager();
    
     string userName = context.Request.QueryString["username"];
    
     // Checks the username empty or not.
     if (string.IsNullOrEmpty(userName))
     {
     throw new Exception("Username can't be empty");
     }
    
     // Invokes the IsAvailableUser method.
     var result = manager.IsAvailableUser(userName);
    
     // Serializes data to json format. 
     var json = new DataContractJsonSerializer(result.GetType());
     json.WriteObject(context.Response.OutputStream, result);
     }
    
     // Whether can resuable by other handler or not.
     public bool IsReusable
     {
     get
     {
     return true;
     }
     }
    }
    
    

    大家注意到UserService類實現(xiàn)了IHttpHandler接口,該接口包含一個方法ProcessRequest()方法和一個屬性IsReusable;ProcessRequest()方法用于處理入站的Http請求,在默認(rèn)情況下,UserService類把Response內(nèi)容類型定義為application/json,這樣我們就可以把數(shù)據(jù)通過JSON格式進(jìn)行傳輸;IsReusable屬性表示相同的處理程序是否可以用于多個請求,這里我們設(shè)置為true,那么處理程序可以用于多個請求。

    前端實現(xiàn)
    注冊表單在檢查用戶名時會在輸入框的右邊動態(tài)地加載圖片,這里我們使用CSS Sprite技巧實現(xiàn)圖片的動態(tài)加載。

    當(dāng)頁面加載時,不是加載每個單獨圖片,而是一次加載整個組合圖片。這是一個了不起的改進(jìn),因為我們只需發(fā)送一個HTTP請求獲取組合圖片就OK了,它大大減少了HTTP請求的次數(shù),減輕服務(wù)器壓力,同時縮短了懸停加載圖片所需要的時間延遲,使效果更流暢,不會停頓。

    這里,我們使用可以一個在線的工具SpritePad設(shè)計組合圖片和生成相應(yīng)的CSS代碼。

    圖5組合圖片

    上面,我們已經(jīng)準(zhǔn)備好組合圖片了,接下來我們添加CSS代碼動態(tài)加載“正確”和“出錯”圖片,具體實現(xiàn)如下:

    /*CSS Sprite*/
    /*Loads tick picture*/
    .tick
    {
     width: 17px;
     height: 17px;
     margin: 6px 0 0;
     float: right;
     background: url(../images/tipicon.png);
     background-position: 0px -32px;
     display: block;
     /*text-decoration: none;
     vertical-align:middle;*/
    }
    
    /*Loads error picture*/
    span.error
    {
     width: 17px;
     height: 17px;
     margin: 6px 0 0;
     float: right;
     background: url(../images/tipicon.png);
     background-position: 0px -15px;
     display: block;
     /*text-decoration: none;
     vertical-align:middle;*/
    }
    
    

    接著,我們在nameAvailable()方法中的Ajax方法添加文件“UserService.ashx”請求,并傳遞用戶名給服務(wù)器;在數(shù)據(jù)庫中查詢用戶名是否已經(jīng)存在,存在返回“false”,否則返回“true”。

    // Sends ajax request to check the name is available or not.
    $.ajax({
     type: "GET",
     url: "UserService.ashx",
     data: dataString,
     success: function(data) {
    
     // When the checking completed, then loaded corresponding css style.
     $('.availability_status').ajaxComplete(function(event, request, settings) {
     if (data == false) {
     $('.availability_status').html('');
     $('.availability_status').removeClass('tick');
     $('.availability_status').addClass('error');
     return true;
     }
     else {
     $('.availability_status').html('');
     $('.availability_status').removeClass('error');
     $('.availability_status').addClass('tick');
     return false;
     }
     });
    
     }
    });
    
    

    最后,我們在注冊表單中添加調(diào)用自定義驗證控件的jQuery代碼,具體實現(xiàn)如下:

    <script type="text/javascript">
    
     // Sets display image size.
     pic = new Image(16, 16);
     pic.src = "loader.gif";
    
     $(function() { // jQuery DOM ready function.
    
     // Get the form object.
     var signUpForm = $("#signup-form");
    
     // Invokes the validation method.
     signUpForm.validation();
    
     });
    </script>
    
    

    圖6用戶注冊界面

    如果大家還想深入學(xué)習(xí),可以點擊兩個精彩的專題:jquery表單驗證大全 JavaScript表單驗證大全

    本文主要介紹了Ajax注冊表單的設(shè)計,通過發(fā)送Ajax請求方式實時地檢查用戶名的可用性,并且使用了自定義的表單驗證插件檢查輸入信息的正確性。

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Ajax注冊用戶時實現(xiàn)表單驗證

    Ajax注冊用戶時實現(xiàn)表單驗證:很多時候在網(wǎng)站上注冊時,我們會發(fā)現(xiàn),注冊表單通常需要檢查用戶名和電子郵件地址的可用性;從而確保用戶之間不擁有相同的用戶名和電子郵件地址;一些網(wǎng)站喜歡在用戶提交填寫的用戶信息時,做信息可用性的檢查,而一些網(wǎng)站會做實時的用戶名和電子郵件地址可用
    推薦度:
    標(biāo)簽: 注冊 用戶注冊 用戶
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 老司机午夜网站国内精品久久久久久久久| 欧洲精品一区二区三区在线观看| 久久国产精品二国产精品| xxx国产精品视频| 中文字幕久久精品| 国产精品国产三级专区第1集| 日本精品一区二区久久久| 日韩精品在线观看视频| 日本内射精品一区二区视频 | 正在播放酒店精品少妇约| 精品久久久久久99人妻| 99久re热视频这里只有精品6 | 中文无码久久精品| 国产一区二区精品久久岳| 亚洲AV永久无码精品一区二区国产 | 国内精品久久久久| 久久亚洲精品成人AV| 亚洲国产精品综合久久网络| 精品国产成人在线| 国产A√精品区二区三区四区| 精品一区二区在线观看| 国产99视频精品免费专区| 亚洲αv在线精品糸列| 91精品国产高清久久久久久io| 国产精品天干天干综合网| 免费看污污的网站欧美国产精品不卡在线观看 | 久久亚洲精品中文字幕| 亚洲精品成人片在线播放| 午夜三级国产精品理论三级| 久久国产精品免费| 精品综合久久久久久88小说| 国产精品推荐天天看天天爽| 国产精品va在线观看无码| 国产精品白丝jkav网站| 成人亚洲日韩精品免费视频| 伊人久久大香线蕉精品| 久久免费精品一区二区| 青青青青久久精品国产| 一级成人精品h| 国产亚洲精品国看不卡| 久久乐国产精品亚洲综合|