[ASP.NET]會員代號欄位失去焦點(OnBlur)檢查帳號是否曾被使用範例—jQuery之Ajax篇

承繼上一次的【[ASP.NET]會員代號欄位失去焦點(OnBlur)檢查帳號是否曾被使用範例—LinkButton篇】,裡面談到除了透過LinkButton是使用JavaScript觸發PostBack,利用此點可以達到我們的要望,另外還提到可以用jQuery的Ajax來達到相同的目的。
此篇就來看看如何透過jQuery的Ajax,讓我們可以在會員代號欄位失去焦點(OnBlur)的時候,透過jQuery啟動Ajax,呼叫另一個aspx來檢查,並且把檢查的結果顯示在畫面上。

緣起

承繼上一次的【[ASP.NET]會員代號欄位失去焦點(OnBlur)檢查帳號是否曾被使用範例—LinkButton篇】,裡面談到除了透過LinkButton是使用JavaScript觸發PostBack,利用此點可以達到我們的要望,另外還提到可以用jQuery的Ajax來達到相同的目的。

此篇就來看看如何透過jQuery的Ajax,讓我們可以在會員代號欄位失去焦點(OnBlur)的時候,透過jQuery啟動Ajax,呼叫另一個aspx來檢查,並且把檢查的結果顯示在畫面上。

 

準備檢查的aspx

我們準備一個aspx用來檢查傳入的使用者帳號,是否已經存在,並且透過xml的格式傳回結果。

由於我們希望傳回的格式是xml,因此aspx的內容必須稍微調整一下:

ChkUserId.aspx

	<%@ Page Language="VB" ContentType="text/xml" AutoEventWireup="false" CodeFile="ChkUserId.aspx.vb" Inherits="ChkUserId" %>
<%@ OutputCache Location="None" %><?xml version="1.0"?>
<myrlt>
<chkrlt><asp:Literal id="L1" runat="server"></asp:Literal></chkrlt>
</myrlt>

接著撰寫檢查的部分,我們一樣省略資料庫測試驗證的部分(請依照自己的狀況修改),改以如果輸入的是topcat就顯示已經存在,其他的就顯示可用。

ChkUserId.aspx.vb

	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim ChkUserID As String = Request.Form("ChkUserID")
    If ChkUserID IsNot Nothing Then
        If ChkUserID = "topcat" Then
            Me.L1.Text = "帳號【topcat】已被使用,請輸入其他的帳號"
        Else
            Me.L1.Text = "帳號【" & ChkUserID & "】可以使用"
        End If
    Else
        Me.L1.Text = "無法取得傳入資料!!"
    End If
End Sub

程式很簡單,就是把Request.Form接到的內容拿來判斷,然後寫到xml

 

jQuery的Ajax部分

接著回到本來的使用者代號欄位的畫面,我們測試的部分就放一個TextBox以及一個Label來顯示結果

	<asp:TextBox ID="txtUserID" runat="server"></asp:TextBox>
<asp:Label ID="lblChkMsg" runat="server" Text=""></asp:Label>

再來就是jQuery的部分,這部分也很簡單,取得TextBox輸入的內容,透過Ajax傳給ChkUserId.aspx,然後接到傳回的xml後,將結果顯示到畫面。

	$(document).ready(doc_ready);

function doc_ready() {
    $('#<%=Me.txtUserID.ClientID%>').blur(UserBlur);
}

function UserBlur() {
    //取得輸入的使用者帳號
    var UserID = $(this).val();

    if (UserID != '') {
        //如果有輸入值,啟動Ajax
        $.ajax({
            type: 'POST',
            url: 'ChkUserId.aspx',
            dataType: 'xml',
            data: { ChkUserID: UserID },
            success: function (oXml) {
                //取回判斷的結果
                var rlt = $('chkrlt', oXml).text();
                //將結果顯示在Label上
                $('#<%=Me.lblChkMsg.ClientID%>').text(rlt);
                //alert結果
                alert(rlt);
            }
        });
    }
    else {
        alert('請輸入使用者代號');
    }
}

比較LinkButton與jQuery的Ajax

這兩個方式來做個小小的比較,技術上都不困難,都還蠻好寫的。不過透過LinkButton是啟動PostBack機制,就算使用UpdatePanel,可以部份內容修改,無論傳遞回去的資料量、傳回的資料量,相信效能上都會遠比使用jQuery的Ajax大。如果畫面更複雜些,那麼這兩種方式的傳遞量會差更多。因此小喵比較推薦使用本篇介紹的方式,透過jQuery的Ajax來啟動後端的ChkUserId.aspx做驗證。


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat