用XMLHTTPRequest对象进行客户端验证
发布时间:2008-03-03 12:38:00
表单验证是WEB开发中经常遇到的问题,我们以前常见的做法是:在客户端对表单域进行内容的检查,看是否是满足一定的要求或满足一定的结构,比如:是内容否为空或是否按规定的格式填写了内容等。其实,我们还可以进行更进一步的验证,比如对数据进行实时验证,下面,我们就利用微软提供的XMLHTTPRequest组件来进一步提高表单的验证能力。
在WIN32平台上进行HTTP编程的方式很多,VB和C++程序员可以使用WinInet库,VB6程序员也可以用VB6自带的Internet控件。然而,对ASP程序员来是说,实现这样的功能更是简单,我们可以做一个组件进行包装。大多说人会认为HTTP只是浏览器和服务器进行通讯的协议,就这方面而言,它确实是功能强蟮男椤TTP还可以用来在任意应用程序之间或应用程序和组件之间进行通讯,也不必是浏览器或服务器。作为WEB开发人员,我们都对HTTP的好处很熟悉了,如跨防火墙,基于Internet标准等。
微软公司在它提供的XML工具包里包括了XMLHTTPRequest组件,因此,XML文档也可以通过标准的HTTP协议在INTERNET上到处传送,当利用HTTP协议传送XML格式的文档时,XMLHTTPRequest组件的方便之处就是,你不必对这些XML进行处理,我们也只需要写简单的几行代码就可以可以得到结果,因此,对WEB开发人员来说,XMLHTTPRequest组件是一个强有力的工具。
XMLHTTPRequest组件是MSXML的一部分,当你安装了IE5.0以上版本的浏览器后,就可以使用该组件功能了。XMLHTTPRequest的核心对象就是XMLHTTP,XMLHTTPRequest对象有几种不同的版本,微软的MSXML包中都有相应的提供,可以到微软的站点去下载最新的版本。 XMLHTTP对象提供了许多方便的方法和属性来实现浏览器的通讯功能。要使用XMLHTTP对象,首先必须创建一个XMLHTTP对象,然后调用open方法去和你指定的URL进行通讯,然后调用send方法发送请求。这个对象扮演的就象浏览器的角色,然后从responseText属性中到返回的数据。另外还可以设置同步或异步方式调用。
下面,我们就以一个实际的例子来看看如何利用XMLHTTP来实时进行表单数据的校验。
假定你要在你的网站上进行用户的注册,其中有一个字段叫做“User ID”,这个字段要求必须是唯一的,当然用电子邮件可以确保唯一性,但如果用户没有电子邮件呢?因此,我们就要求当用户注册时,能随时检查用户输入的“User ID”是否已经存在。如果存在,就必须立刻通知用户重新进行填写。我们通常的做法是先提交表单,然后才能知道该“User ID”是否已经存在了。显然,这种办法并不是最好的,为了知道是否存在该值,我们得不停地进行表单的提交,也意味着得多次与服务器打交道。最理想的办法就是当用户刚刚输入完“User ID”后就能够知道是否存在该值是否已经存在。用JavaScript和XMLHTTP就能够实现这样的需求。
假定有以下的注册页面:
注册页面中关于“User ID”的HTML代码可能是下面的样子:
<input type="text" name="UserID" onblur="validateuserid(this.value);">
当用户输入完“User ID”的值焦点移出该输入框后,就会触发 onblur事件,当然,如果你不喜欢用onblur事件的话,也可以用按钮的onclick事件来做同样的事情。下面就是文本输入框失去焦点后所执行的脚本:
<SCRIPT LANGUAGE="JavaScript">
function validateuserid(suserid)
{
// 改变鼠标形状为等待状态,因为考虑到网络速度和服务器的负荷,可能要两、三秒钟才能返回结果,这样可以给用户一个运行状态提示,当然,我们还可以用DHTML做出更友好的界面来。
document.body.style.cursor="wait";
// 创建一个XMLHTTPRequest对象的实例,当然,根据版本的不同,你还可以写成:
// var oXMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");
var oXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
// 我们要请求的ASP页面,由于我们的请求是在客户端进行,因此,我们必须用绝对地址。
var sURL = "http://ServerName/VirtureDirectory/validateuser.asp?username=" + suserid
// 准备发送请求。XMLHTTP的请求方法有多种:比如POST,HEAD,PUT等,第3个参数表明请求是否是异步的。
// 这里是采用同步的方式。设为false,表明:我们在进行下面的工作之前,一直等待返回结果。
// open方法还有两个参数,对要求用户名和密码的站点提供用户名和密码。
oXMLHTTP.open("GET", sURL, false);
// 发送请求
oXMLHTTP.send();
// 根据返回的结果来告诉用户是否已经存在该 “User ID”
if (oXMLHTTP.responseText == "exists")
alert("真抱歉: User ID " + suserid + "已经存在了,请另换一个吧。");
document.body.style.cursor="auto";
}
</SCRIPT>
如果“User ID”在数据库中已经存在的话,将返回“exists”,当然,你也可以任意修改返回的值。
猜你喜欢
- 综述:本文讨论了VBScript和 JScript之间的区别,以及它们的使用场合。推荐:Vbscript5.5中文语言参考手册chm格式下载
- PHP是一种面向对象的编程语言,它允许开发者使用面向对象的编程技术来构建复杂的应用程序。下面是一些关于PHP面向对象编程的讲解:类与对象类是
- 下面两个函数实现了对字符串中数字的判断。function isnaw(str) f
- 网上广泛流传的取 object 的绝对位置的做法是:var getAbsPos = function(pTar
- VBSCRIPT中的日期,时间,星期函数很丰富,给我们使用带来了很大的方便,我个人使用最多的就是用now()来获取服务器的当前日期和时间。但
- SQL查询输出,根据表内某字段为准,输出不重复记录,或删除掉重复的记录,保留所需要的记录。今儿见一朋友在蓝色里问起(查询不重复记录~),想想
- 见下表:序号保留字序号保留字序号保留字1ADD80ESCAPE159OR2ABSOLUTE81EXCEPT160ORDER3ACTION82
- Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命
- 如何最大限度地实现安全登录功能? 具体方法如下(这是一个程序,为便于说明,中间用虚线“------”将代
- 在我们的生活中,需要接触大量的带有机械按键的物品。当你用手指按下按键的时候。都会或强或弱的感受一股(嗯,也有可能是一丝丝)反作用力传递到你手
- 最近在查看asp之家的访客统计时,发现访客使用firefox浏览器的占了10%-15%,而大部分的访客使用的是IE6,呵呵我也是用IE6。而
- 近日无事,想起以前曾打算过要做一个定时重启或关机的工具,便花了一点时间以hta的形式写了个,名为"Windows Timer&qu
- <SCRIPT language=vbscript event=BeforeInitialBind(i
- Web_THBC 为表示层也就是页面(.aspx) BLL_THBC 为业务逻辑层 DAL_THBC 为数据库交互层 (向数据库执行SQL语
- 校勘(collation)是指对代码页、字母大小写、音调、语言和字母表的整理,很多校勘都是在数据进入数据库之前进行的,根据我的经验,北美的大
- 【译者的话】 网页上的小广告(banner)已经成为一种宣传推广的重要形式,但这些小广告除了版面细小外,图象的表现还受到象素较低等其它因素影
- 写过稍微大型一点 ASP 的人都知道,Session 这个对象真是好用,它可以用来记录使用者私有的资料变量,既安全又方便。但是你真的知道 S
- 语法: ROW_NUMBER() OVER([ <partition_by_clause>] <order_by_clau
- 比如 <div><img .../></div>想通过对这个div设置透明度来达到调整图片的透明度如果不
- 编写兼容IE和FireFox的脚本确定的件很烦人的事,今日又经历了一次。一、正式表达式问题试图用以下表达式提取中括号“]”后面的内容,连接调