分别使用创建XMLHttpRequest和jQuery实现用户注册前的验证

测试环境vs2008

Html代码如下:

<asp:TextBox ID="userName" runat="server" />

<span id="validateMessage"></span><br />

<input type="button" value="创建xmlhttprequest验证用户" onclick="RunAjax();" /><input type="button" value="jQuery验证用户" id="btnJQuery" />

版本一:通过创建xmlHttpRequest对象方式

<script type="text/javascript">

        var xmlHttp;

        //创建XMLHttpRequest对象

        function createXMLHttpRequest() {

            //IE不同版本

            if (window.ActiveXObject) {

                try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); }

                catch (e) {

                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

                }

            }

            //IE

            else if (window.XMLHttpRequest) {

                xmlHttp = new XMLHttpRequest();

            }

        }

        //查询字符串

        function createQueryString() {

            var userName = document.getElementById("userName").value;

            var querystring = "userName=" + userName;

            return querystring;

        }

        //

        function RunAjax() {

            createXMLHttpRequest();

            var queryString = "ashx/IsHaveUser.ashx?";

            queryString = queryString + createQueryString()

        + "&timeStamp=" + new Date().getTime();

            xmlHttp.onreadystatechange = handleStateChange;

            xmlHttp.open("GET", queryString, true);

            xmlHttp.send(null);

            document.getElementById('validateMessage').innerHTML = "<img src='images/loading.gif' />";

        }

        function handleStateChange() {

            if (xmlHttp.readyState == 4) {

                if (xmlHttp.status == 200) {

                    var result = xmlHttp.responseText;                

            setTimeout(document.getElementById("validateMessage").innerHTML = result, 2000);

                }

            }    

        }

版本二:jQuery中的关于Ajax有很多函数,下面使用较简单也用的较多的load函数.能够满足我们的需求

<script type="text/javascript">

        $(document).ready(

            function() {

                $("#btnJQuery").bind("click", function() {

                $("#validateMessage img").remove();//点击按钮时清除img元素

               $("<img src='images/loading.gif'/>").

appendTo($("#validateMessage")); //请求过程中加载loading图片

                  $("#validateMessage").load("ashx/IsHaveUser.ashx?userName=" + $("#userName")[0].value + "&timeStamp=" + new Date().getTime());//ajax请求

                });

            }

        )

 </script>

对比2中方法,发现jquery方便很多.不需要我们自己去创建xhr对象.

请求URL为实现了IhttpHandler接口的类,这样我们可以对用户请求进行处理

public class IsHaveUser : IHttpHandler {

    private string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

    public void ProcessRequest (HttpContext context) {

        System.Threading.Thread.Sleep(2000);//模拟延迟

        context.Response.ContentType = "text/plain";

         using (SqlConnection conn = new SqlConnection(connectionString))

        {

            conn.Open();

            SqlCommand comm = new SqlCommand("select UserId From Users Where UserName=@UserName", conn);//可换成自己的数据库或其他

            SqlParameter param = comm.CreateParameter();

            param.ParameterName = "@UserName";

            param.Value = context.Request.QueryString["userName"];

            param.DbType = DbType.String;

            comm.Parameters.Add(param);

            SqlDataReader dr= comm.ExecuteReader();

            if (dr.HasRows)//存在用户的情况

            {

                context.Response.Write("<img src='images/error.gif' />");

            }

            else { context.Response.Write("<img src='images/right.gif' />"); }

        }

    }

 

    public bool IsReusable {

        get {

            return false;

        }

    }

}

效果图:

 

posted @ 2009-10-09 15:13  老Z  阅读(1561)  评论(0编辑  收藏  举报