xmlHttpRequest无刷新验证用户名

现在好多网站上的注册都用了无刷新验证用户名,这种效果咋看感觉很复杂很难实现,其实它里面用到了Ajax中的核心xmlHttpRequest这个类,如果只是单单想实现这个效果,压根就不用引用Ajax.Net中的组件,因为感觉有点大材小用,下面是具体实现这种效果的方法,希望能给初学Ajax的朋友带来一点帮助.



首先建立一个注册与验证的页面xmlHttpRequest.aspxValidate.aspx,因为仅仅是实现无刷新验证用户名,所以我们可以把其它项都撇开,Register.aspx中摆好div跟控件,具体如下:
Code
<body>
    
<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>

然后我们可以写两个样式用于用户名通过验证或未通过验证的显示样式,未加入图片.
Css
 .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页面去.
脚本
<script language="javascript" type="text/javascript">
  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这句是用于获取验证用户名页面中异步传输过来的值..
上面的代码做了详细的注释,这里就不多做解释了..
接下来验证用户名的页面中接收传过来的值进行判断了...
Code
 1    public partial class Validate : System.Web.UI.Page
 2    {
 3        //获取url传过来的值
 4        private string UserName
 5        {
 6            get return Request.QueryString["UserName"].ToString(); }
 7        }

 8        protected void Page_Load(object sender, EventArgs e)
 9        {
10            //这里你可以连至用户表检查是否存在这个用户名,当然如果你用membership中的验证方法会更简洁.
11            if (Server.HtmlEncode(UserName) =="123456")
12                //还记得脚本中的if(sta.indexOf("regok")!=-1)这句吗,regok就是这里的啦..
13                Response.Write("regok");
14            else
15                Response.Write("error");
16        }

17    }
就这样一个简单的无刷新验证用户就完成啦...本机测试已通过.呵呵刚好最近一直在学习控件开发,下篇就将其封装成一个控件.
源码下载

转载于:https://www.cnblogs.com/yangjunwl/articles/1139048.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何理解和评价机器学习中的表达能力、训练难度和泛化性能

来源&#xff1a; Eric Jang 的个人博客非常感谢王家兴 (Jiaxing Wang) 把这个博客文章翻译成中文。当我在阅读机器学习相关文献的时候&#xff0c; 我经常思考这项工作是否&#xff1a;提高了模型的表达能力&#xff1b;使模型更易于训练&#xff1b; 提高了模型的泛化性能。在…

谷歌公布72位量子比特处理器,吹响量子霸权冲锋号

作者&#xff1a;杨晓凡谷歌量子 AI 实验室今天发布了新的 72 位量子比特的量子处理器 Bristlecone。虽然目前还没有看到具体的实验结果&#xff0c;但这块芯片的未来有很大潜力&#xff0c;很有可能达成量子计算领域内的重要里程碑。谷歌量子 AI 实验室&#xff08;Google Qua…

AI可以在游戏里称霸,但是解决现实问题太难了

来源&#xff1a;36氪据《大西洋月刊》报道&#xff0c;直到最近&#xff0c;那些能在各类游戏中击败人类冠军的机器&#xff0c;解决现实问题太难了。1997年&#xff0c;为了在国际象棋中击败象棋大师加里卡斯帕罗夫&#xff08;Garry Kasparov&#xff09;&#xff0c;IBM的工…

大话设计模式-策略模式与简单工厂模式

来源&#xff1a;http://blog.csdn.net/wulingmin21/article/details/6712684 策略模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 例如&#xff1a; CashNormal、CashRebate…

全球知识图谱专家分布、研究流派(附学者名单)

来源&#xff1a; THU数据派概要&#xff1a;在维基百科的官方词条中&#xff1a;知识图谱是Google用于增强其搜索引擎功能的知识库。什么是知识图谱&#xff1f;在维基百科的官方词条中&#xff1a;知识图谱是Google用于增强其搜索引擎功能的知识库。本质上, 知识图谱旨在描述…

软件系统架构~思维导图

#原图 System.out.println("https://www.processon.com/view/link/6194f2740e3e7409b9c2f3df")

创建型、结构型、行为型模式(1)

来源&#xff1a;http://blog.csdn.net/wulingmin21/article/details/6753363 目的 创建型模式 Creational Pattern 结构型模式 Structural Patterns 行为型模式 Behavioral Pattern 概念 创建型模式&#xff0c;就是创建对象的模式&#xff0c;抽象了实例化的过程。…

干货|全球人工智能专利分布战情图

来源&#xff1a; 点滴科技资讯作者&#xff1a;许倩未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&am…

tomcat高版本之URL解析异常解决

IllegalArgumentException 一、项目场景&#xff1a; 例如&#xff1a;由于Apache的tomcat的版本升级&#xff0c;遵循RFC 7230 and RFC 3986规范解析请求地址。同时添加了对于http头的验证请求。 导致报文存在导致特殊字符&#xff08;不在解析范围内的&#xff09;tomcat7…

创建型、结构型、行为型模式(2)

来源&#xff1a;http://blog.csdn.net/wulingmin21/article/details/6757111 创建型模式 Singleton模式解决的是实体对象个数的问题。 除了Singleton之外&#xff0c;其他创建型模式解决的都是New所带来的耦合关系。 Factory Method&#xff0c;Abstract Factory&#xff0c;B…

大数据行业洞察:未来2-3年或迎数据时代的真正高潮

来源&#xff1a; DT数据侠 作者&#xff1a;中关村老李从2012年的“用户标签”到2014年的“用户画像”&#xff0c;从2015年的“大数据”到2017年的“人工智能”&#xff0c;大数据正在从神坛走向现实。“标签”到“画像”&#xff0c;代表着数据在数量和维度上&#xff0c;逐…

5G时代到来,人工智能设备如何重塑TMT行业

来源&#xff1a;亿欧在近期召开的2018世界移动通信大会上&#xff0c;5G作为热点话题被高频提及&#xff0c;当前&#xff0c;5G技术已经取得突破进展&#xff0c;全球范围内已有运营商宣布2018年将投入商用。在这一背景下&#xff0c;5G与人工智能技术的结合将重塑众多产业&a…

java调用GDAL实现栅格数据的重采样的一种方法

目录 1.关于重采样 1.1概念 1.2用途 1.3常见算法 2.关于GDAL 2.1GDAL中的重采样算法 3.实现重采样 3.1思路 3.2完整代码 3.3使用QGIS验证效果 1.关于重采样 1.1概念 重采样是以原始图像的像元值或者导出的值填充到新的图像的每个像元的的过程。 1.2用途 在地理信…

Semtech与Lacuna从太空接收信息

来源&#xff1a;Semtech概要&#xff1a;Lacuna Space使用了一组星座的极地近地轨道卫星&#xff0c;来接收地面传感器发出的基于LoRa的信息。加利福尼亚州&#xff0c;卡马里奥&#xff0c;2018年2月26日—高性能模拟和混合信号半导体及先进算法领先供应商Semtech Corporatio…

ABAP--使用SLIN事务码进行ABAP程序扩展语法检查,提高程序开发的质量

TCODE: SLIN 或者在SE38 界面的菜单&#xff1a; 程序&#xff0d;》语法&#xff0d;》扩展程序检查 就会弹出下面的界面&#xff0c;用户可以根据自己的需求设置检查点&#xff0c;并根据检查结果修改程序&#xff0c;使自己的代码更加可靠。另外在SE38 界面的菜单&#xff1…

谷歌大脑发布神经网络的「核磁共振」,并公开相关代码

作者&#xff1a;杨晓凡、camel、思颖、杨文神经网络的可解释性一直是所有研究人员心头的一团乌云。传统的尝试进行可解释性研究的方法是通过查看网络中哪个神经元被激发来来理解&#xff0c;但是即使我们知道「第 538 号神经元被激发了一点点」也毫无意义&#xff0c;并不能帮…

Java加密与解密的艺术~Provider

Provider类实现了Java安全性的一部分或全部&#xff0c;我们称它为提供者。 Provider类可能实现的服务包括&#xff1a; 算法&#xff08;如DSA、RSA、MD5或SHA-1&#xff09; 密钥的生成、转换和管理设施&#xff08;如用于特定算法的密钥&#xff09; 每个提供者…

Fiddler (一) 教程(Web调试工具)

From&#xff1a;http://kb.cnblogs.com/page/130367/ Fiddler的基本介绍 Fiddler 官方网站&#xff1a;http://www.fiddler2.com Fiddler 官方帮助&#xff1a;http://docs.telerik.com/fiddler/knowledgebase/quickexec Fiddler 官方网站提供了大量的帮助文档和视频教程&…

从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程

通用分页存储过程很实用,但毕竟不是全适用于一些环境,譬如我遇到过一种情况,需要先外链两个表,然后再关联几个表,总之参数传递很烦人,这里不细说了,现在只谈实现查询后,怎么分页的简单技巧1,建立用户函数CREATE function F_xxxx(ID nvarchar(36),Key nvarchar(36),......)…

量子计算机就要来了,它真的能改变世界吗?

来源&#xff1a;网易科技概要&#xff1a;量子计算机的理论运行速度远远超出任何传统的超级计算机。在位于纽约市以北约50英里处僻静乡村中的一个小型实验室内&#xff0c;天花板下缠绕着错综复杂的管线和电子设备。这一堆看似杂乱无章的设备是一台计算机。它与世界上的任何一…