zoukankan      html  css  js  c++  java
  • 用AJAX实现注册用户即时检测(XMLHttpRequest对象)

    常见的用户注册是用户输入用户名,后台程序检测数据库中用户名是否重复而做出注册的成功与失败之提示(当用户注册重名时将返回重新注册),或者稍微人性化一点就是在用户名文本框后添加一个检测按钮,让用户检测后再做注册。
    以上操作,对于用户体验方面来说是比较“差劲”的,一个很好的用户体验就是:当用户输入完注册用户名后,Web系统应能即时检查并即时显示,并在检查和显示的同时不影响当前页面的操作。这也就是“异步获取数据”的要求,而这正是AJAX的强项

    createObject.js

    //声明XMLHttpRequest对象
    var xmlHttp;

    //检测用户名是否存在
    function CheckName(userName)
    {
        createXMLHTTP();//创建XMLHttpRequest对象
        var url="DisposeEvent.aspx?Name="+userName+"&Event=Check";
        xmlHttp.open("GET",url,true);
        xmlHttp.onreadystatechange=checkUserName;
        xmlHttp.send(null);
    }

    function createXMLHTTP()
    {
        if(window.XMLHttpRequest)
        {
            xmlHttp=new XMLHttpRequest();//mozilla浏览器
        }
        else if(window.ActiveXObject)
        {
            try
            {
                xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");//IE老版本
            }
            catch(e)
            {}
            try
            {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");//IE新版本
            }
            catch(e)
            {}
            if(!xmlHttp)
            {
                window.alert("不能创建XMLHttpRequest对象实例!");
                return false;
            }
        }
    }

    //执行检测用户名回调函数
    function checkUserName()
    {
        if(xmlHttp.readyState==4)//判断对象状态
        {
            if(xmlHttp.status==200)//信息成功返回,开始处理信息
            {
                if(xmlHttp.responseText=="true")
                {
                    document.getElementById("imgName").src="images/true.gif";
                    //让注册按钮失效
                    document.getElementById("btnReg").disabled=false;
                }
                else
                {
                    document.getElementById("imgName").src="images/false.gif";
                    document.getElementById("btnReg").disabled=true;                        
                }
            }
        }
    }

    //注册新用户
    function regUser()
    {
        if(document.getElementById("userName").value=="")
        {
            alert("对不起,用户名不为空");
            return false;
        }
        if(document.getElementById("userPwd").value=="")
        {
            alert("对不起,密码不为空");
            return false;
        }
        var url="DisposeEvent.aspx?Name="+document.getElementById("userName").value+"&Pwd="+document.getElementById("userPwd").value+"&Event=Reg";
        xmlHttp.open("GET",url,true);
        xmlHttp.onreadystatechange=regUserInfo;//注册用户回调函数
        xmlHttp.send(null);
    }

    //注册用户回调函数
    function regUserInfo()
    {
        if(xmlHttp.readyState==4)//判断对象状态
        {
            if(xmlHttp.status==200)//信息成功返回,开始处理信息
            {
                if(xmlHttp.responseText=="true")//获取的Response.Write("true");里面的文本
                {
                    alert("恭喜,新用户注册成功!");
                    document.getElementById("userName").value="";
                    document.getElementById("userPwd").value="";               
                }
                else
                {
                    alert("对不起,注册失败!");
                    document.getElementById("userName").value="";
                    document.getElementById("userPwd").value="";                        
                }
            }
        }
    }

    页面DisposeEvent.aspx.cs

    public partial class DisposeEvent : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            User user = new User();
            //是否为执行CheckName方法
            if (Request.QueryString["Event"].ToString() == "Check")
            {
                if (user.checkName(Request.QueryString["Name"].ToString()))
                {
                    //当数据库中已存在此用户时输出为false,让其显示相应图标
                    Response.Write("false");
                    Response.End();
                }
                else
                {
                    Response.Write("true");
                    Response.End();
                }
            }

            //是否为执行regUser方法
            if (Request.QueryString["Event"].ToString() == "Reg")
            {
                if (user.insertUserInfo(Request.QueryString["Name"].ToString(), Request.QueryString["Pwd"].ToString()))
                {
                    Response.Write("true");//客户端用responseText接收
                    Response.End();
                }
            }
        }
    }
    后台: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>AJAX实现用户注册</title>
        <script language="javascript" src="createObject.js"></script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div style="text-align: center">
            <table style=" 442px; height: 145px">
                <tr>
                    <td style=" 100px">
                        用户名:</td>
                    <td style=" 100px">
                        <input id="userName" type="text" onkeyup="CheckName(document.getElementById('userName').value);" /></td>
                    <td style=" 100px">
                        <img src="" id="imgName" /></td>
                </tr>
                <tr>
                    <td style=" 100px">
                        密码:</td>
                    <td style=" 100px">
                        <input id="userPwd" type="text" /></td>
                    <td style=" 100px">
                    </td>
                </tr>
                <tr>
                    <td colspan="3">
                        <input id="btnReg" style=" 69px" type="button" value="注册" onclick="regUser();" /></td>
                </tr>
            </table>
       
        </div>
        </form>
    </body>
    </html>

  • 相关阅读:
    ArcGIS Server 10.2 安装教程
    leaflet 使用kriging.js实现前端自定义插值
    气象科普 -降水
    前端开发者如何用JS开发后台
    Spring的简单介绍
    Hibernate与jsp技术结合的小例子
    Servlet_001 我的第一个servlet程序
    Hibernate一级缓存和三种状态
    github提交代码
    MySql索引原理以及查询优化
  • 原文地址:https://www.cnblogs.com/hubcarl/p/1420910.html
Copyright © 2011-2022 走看看