Ajax+asp.net无刷新验证用户名
注冊用戶頁面代碼如下
<script?language="javascript"?type="text/javascript">var?xmlHttp?=?false;
try?...{
???xmlHttp?=?new?ActiveXObject("Msxml2.XMLHTTP");
}?catch?(e)?...{
???try?...{
?????xmlHttp?=?new?ActiveXObject("Microsoft.XMLHTTP");
???}?catch?(e2)?...{
?????xmlHttp?=?false;
???}
}
if?(!xmlHttp?&&?typeof?XMLHttpRequest?!=?'undefined')?...{
???xmlHttp?=?new?XMLHttpRequest();
}
function?callServer()?...{
???var?u_name?=?document.getElementById("tbUserName").value;
???if?((u_name?==?null)?||?(u_name?==?""))?return;
???var?url?=?"CheckUser.aspx?name="?+?escape(u_name);
???xmlHttp.open("GET",?url,?true);
???xmlHttp.onreadystatechange?=?updatePage;
???xmlHttp.send(null);??
}
function?updatePage()?...{
???if?(xmlHttp.readyState?<?4)?...{
test1.innerHTML="loading...";
???}
???if?(xmlHttp.readyState?==?4)?...{
?????var?response?=?xmlHttp.responseText;
test1.innerHTML=response;
???}
//???if?(test1.innerHTML=="已被注冊"){
//?document.form1.submit.disabled=true}else{
//?document.form1.submit.disabled=false
//???}
}
</script>
<span?id="test1"></span>
CheckUser.aspx:
asp.net頁面代碼如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CheckUser.aspx.cs" Inherits="CheckUser" %>
<!--這個頁里只能有上面的一行.不然不會返回數據-->
CheckUser.aspx.CS:
public?partial?class?CheckUser?:?System.Web.UI.Page
...{
?????protected?void?Page_Load(object?sender,?EventArgs?e)
?????...{
?????????string?nam?=?Request.QueryString["name"].ToString();
?????????string?sql?=?"select?id?from?Users?where?username='"?+?nam?+?"'";
?????????SqlDataReader?dr?=?DBHelper.ExecuteReader(sql);
?????????if?(dr.Read())
?????????...{
?????????????Response.Write("此用戶名已經被注冊");
?????????}
?????????else
?????????...{
?????????????Response.Write("此用戶名可以使用");
?????????}
?????????dr.Close();
?????}
}
現在好多網站上的注冊都用了無刷新驗證用戶名,這種效果咋看感覺很復雜很難實現,其實它里面用到了Ajax中的核心xmlHttpRequest這個類,如果只是單單想實現這個效果,壓根就不用引用Ajax.Net中的組件,因為感覺有點大材小用,下面是具體實現這種效果的方法,希望能給初學Ajax的朋友帶來一點幫助.
首先建立一個注冊與驗證的頁面xmlHttpRequest.aspx與Validate.aspx,因為僅僅是實現無刷新驗證用戶名,所以我們可以把其它項都撇開,Register.aspx中擺好div跟控件,具體如下:
????<form?id="form1"?runat="server">
????????<div?style="width:?100%;?float:?left;?text-indent:?24px;?font-size:12px">
????????????<div?style="float:left">
????????????????您的用戶名:<asp:TextBox?ID="txtUserName"?runat="server"?style="border:1px?solid?#D4D8D9"?onblur="return?ValidateUser();"></asp:TextBox>
????????????????</div>?<div?id="default"?></div>
????????</div>
????</form>
</body>
然后我們可以寫兩個樣式用于用戶名通過驗證或未通過驗證的顯示樣式,未加入圖片.
.Error{...}{?border:1px?solid?#A2553B;background-color:#FEF1E1;width:140px;float:left;height:18px;line-height:18px;margin-left:24px;color:#4F4F4F;text-indent:12px;}.Right{...}{?border:1px?solid?#419041;background-color:#EDFCE7;width:140px;float:left;height:18px;line-height:18px;margin-left:24px;color:#4F4F4F;text-indent:12px;}
這兩個樣式你可以把它放到樣式表中也可以將它放到<head></head>當中.
接下來只需敲一段腳本到注冊的xmlHttpRequest.aspx頁面去.
??function?ValidateUser()
??...{
?????//獲得用于顯示驗證是否通過的詳細信息
?????var?obj=document.getElementById("default");
?????//獲取用戶輸入的用戶名的值
?????var?str=document.getElementById("txtUserName").value;
?????//定義一個bool型變量
?????var?chk=true;
????if?(chk)...{
???????//因為輸入的用戶名可能含有中文,所以將其解碼
????????var?username=escape(str);
????????//用于驗證用戶名的后臺頁面
????????var?usrurl="/Validate.aspx?UserName="+username;
????????//獲取從驗證頁面中異步傳輸過來的值
????????var?sta=GetResponseText(usrurl);
????????//如果異步傳輸失敗?????????
????????if(sta==false)...{
????????????chk=true;
????????????obj.className="d_ok";
????????????obj.innerHTML='該會員未能檢測,可以嘗試注冊。';
????????}
????????//異步傳輸成功
????????else...{
??????????????//假如傳過來的值的開始位置是"regok",這個值是在驗證頁面Response.Write出來的值,如果是regok則表示驗證通過,否則的話就是驗證失敗.
????????????if(sta.indexOf("regok")!=-1)...{
???????????????//驗證通過
????????????????chk=true;
????????????????//用于顯示驗證是否通過的詳細信息加上剛剛所定義正確時的樣式
????????????????obj.className="Right";
????????????????obj.innerHTML='該會員名可以注冊。';
????????????}else...{
????????????????//驗證未通過
????????????????chk=false;
????????????????//用于顯示驗證是否通過的詳細信息加上剛剛所定義錯誤時的樣式
????????????????obj.className="Error";
????????????????obj.innerHTML='該會員名已經被注冊。';
????????????}
????????}
????}else...{
????????obj.className="Error";
????}
????return?chk;
??}
??function?GetResponseText(url)
??...{
??????//定義一個http_request變量
???????var?http_request;
????????if?(window.XMLHttpRequest)?...{
????????????????//對于Mozilla、Netscape、Safari等瀏覽器,創建XMLHttpRequest對象
????????????????http_request?=?new?XMLHttpRequest();
????????????????if?(http_request.overrideMimeType)?...{
????????????????????????//如果服務器響應的header不是text/xml,可以調用其它方法修改該header
????????????????????????http_request.overrideMimeType('text/xml');
????????????????}
????????}?else?if?(window.ActiveXObject)?...{
????????????????//?對于Internet?Explorer瀏覽器,創建XMLHttpRequest
????????????????try?...{
????????????????????????http_request?=?new?ActiveXObject("Msxml2.XMLHTTP");
????????????????}?catch?(e)?...{
????????????????????????try?...{
????????????????????????????????http_request?=?new?ActiveXObject("Microsoft.XMLHTTP");
????????????????????????}?catch?(e)?...{}
????????????????}
????????}
????????//打開驗證頁面的地址
???????http_request.open('GET',?url,?false);
???????http_request.send(null);
???????????if?(http_request.readyState?==?4)
???????? ?...{
???????????? //?收到完整的服務器響應
???????????????? if?(http_request.status?==?200)?...{
???????????????????? ????//HTTP服務器響應的值OK
???????????????????????? ?var?requestdoc?=?http_request.ResponseText;
????????????????}
???????????? ???else?...{
???????? ??requestdoc?=?"error";
???? ???}
??}
????return?requestdoc;
??}
</script>
核心代碼:
http_request.ResponseText這句是用于獲取驗證用戶名頁面中異步傳輸過來的值..
上面的代碼做了詳細的注釋,這里就不多做解釋了..
接下來驗證用戶名的頁面中接收傳過來的值進行判斷了...
????...{
?????????//獲取url傳過來的值
?????????private?string?UserName
?????????...{
?????????????get?...{?return?Request.QueryString["UserName"].ToString();?}
?????????}
?????????protected?void?Page_Load(object?sender,?EventArgs?e)
????????...{
????????????//這里你可以連至用戶表檢查是否存在這個用戶名,當然如果你用membership中的驗證方法會更簡潔.
????????????if?(Server.HtmlEncode(UserName)?=="123456")
???????????????//還記得腳本中的if(sta.indexOf("regok")!=-1)這句嗎,regok就是這里的啦..
????????????????Response.Write("regok");
????????????else
????????????????Response.Write("error");
????????}
????}
總結
以上是生活随笔為你收集整理的Ajax+asp.net无刷新验证用户名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一步一步学Silverlight 2系列
- 下一篇: Asp.NET大文件上传组件开发总结(二