ssh+ajax 注册验证 以及struts2+json注意事项

在我们日常开发中,经常会遇到注册时进行用户名异步验证这一步,下面是我开发时的一个小例子,希望能对大家有帮助。需要注意的是,我们后台是利用json返回json字符串,struts2整合json我们需要加入以下jar包

<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-json-plugin</artifactId>
			<version>2.3.16</version>
		</dependency>

		<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.4</version>
			<classifier>jdk15</classifier>
		</dependency>


页面效果:左图是用户名已被注册,右图是允许注册


下面是我的前台代码

<script type="text/javascript">
	function checkLogin(){
		var xmlHttp;

		var name = document.getElementById("email").value;
		if(window.XMLHttpRequest){
		xmlHttp = new XMLHttpRequest();
		}
		else {
		xmlHttp = new ActiveXObject("MicroSoft.XMLHTTP");//老版本的ie
		}
		xmlHttp.onreadystatechange=function(){
			if(xmlHttp.readyState==4 && xmlHttp.status==200){
			//var ss = xmlHttp.responseText;
		
			var dataObj=eval("("+xmlHttp.responseText+")");
		
				if(dataObj.exist=="false"){
				
				document.getElementById("tip").innerHTML="<img src='images/ok.png'/>";
				}
				else
				{
				
					document.getElementById("tip").innerHTML="<img src='images/no.png'/>";
				}
			}
		};
		xmlHttp.open("post","Json_checkRegister.action?checkname="+name,true);
		xmlHttp.send();
		}
	</script>

<p><input type="email" id="email" name="user.username" onblur="checkLogin();" class="loginInput" autofocus="autofocus" required="required" autocomplete="off" placeholder="请输入电子邮箱" value="" /><font id="tip"></font></p>



下面是后台action代码

public String checkRegister() throws Exception{
		HttpServletResponse response = ServletActionContext.getResponse();
		JSONObject json=new JSONObject();  
		PrintWriter out  = response.getWriter();
		if(this.userservice.checkRegister(checkname)==false){
			
			json.put("exist","false");
			out.println(json);  
			out.flush();
			out.close();
			return "userAllowRegister";
		}
			json.put("exist","true");
			out.println(json); 
			out.flush();
			out.close();
		return "usernoregister";
	}
	


配置文件strut.xml代码

<package name="json" namespace="/" extends="json-default">
	<action name="Json_*" class="user_action" method="{1}">
		<result name="userAllowRegister" type="json"></result>
		<result name="usernoregister" type="json"></result>
		</action>
		</package>

注意返回类型为json

JSON(Java Script Object Notation),是一种语言无关的数据交换格式。
JSON插件是Structs 2 的Ajax插件,通过利用JSON插件,开发者可以很方便,灵活的利用Ajax进行开发。
Json是一种轻量级的数据交换格式,JSon插件提供了一种名为json的Action ResultType 。

一旦为Action指定了该结果处理类型,JSON插件就会自动将Action里的数据序列化成JSON格式的数据,
并返回给客户端物理视图的JavaScript。简单的说,JSON插件允许我们在JavaScript中异步的调用Action,
而且Action不需要指定视图来显示Action的信息显示
而是由JSON插件来负责具体将Action里面具体的信息返回给调用页面
Json的数据格式可简单如下形式: person = { name: 'Jim',age: 18,gender: 'man'}。
如果action的属性很多,我们想要从Action返回到调用页面的数据。

如果我们在后台不希望返回的数据,可以禁止其被序列化,可以使用 @JSON(serialize=false)注解对其屏蔽,说明
属性不被加入json。


以下三个注解也经常会用到:
属性get方法上面加

@JSON(name="newName")json中的名称
@JSON(serialize=false)属性不被加入
json@JSON(format="yyyy-MM-dd")格式化日期


这个时候配置includeProperties或者excludeProperties拦截器即可。

<!-- 只包含user.id属性 -->

<resulttype="json"name="user">

<paramname="includeProperties">

user\.id

</param>

<!-- 不包含user属性 -->

<resulttype="json"name="list">

<paramname="excludeProperties">

user

</param>

</result>

<!-- 根对象只包含user -->

<resulttype="json">

<paramname="root">

user

</param>

</result>

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...