AJAX向服务器发送请求并返回json数据

这里想实现的功能大概是这样:类似注册时,用户名已经被注册了的情况。当用户失去焦点的时候利用AJAX发送请求到服务器端,服务器端进行数据库查询,如果有相同的用户名页面提示用户名已被注册了,不能用,否则就通过注册

这里用的是Jquery AJAX以及SSH框架,下面是我的实现步骤:

先引入struts-json的jar包

1、注册页面添加JS方法调用

<span id="tip" style="color:red"></span>
	<s:form action="Register">
		<s:textfield id="username" name="username" label="用户名" onblur="validatename()"/>
		<s:password name="password" label="密码" />
		<s:submit value="注册" />
	</s:form>
jquery方法如下:其中url为请求的地址,type为http请求方法,data为发送到服务器的参数,dataType为返回的数据类型,success为请求成功后的回调函数,如果要设置无论请求是否成功都回调可以设为complete
<script language="JavaScript">
function validatename(){
	var user="username="+$('#username').val();
	$.ajax({
		url:"ValidateName.action",type:'post',data:user,dataType:'text',success:processResponse
	});
}
function processResponse(msg){
	var data = eval("("+ msg+")");
	$("#tip").html(data.tip);
}
</script>

在此说一下,这里的dataType返回类型为text,回调函数中才可用eval解析这个json数据,用dataType:'json'的话返回的是一个对象,用eval会报js错误


2、接下来编写action类
private String username;
	private String password;
	private String tip;
	private LoginService ls;

	public String execute() {
		try {
			if (ls.validateName(getUsername())) {
				setTip("你输入的用户名" + getUsername() + "已被注册!");
			} else {
				setTip("你的用户名" + getUsername() + "可用!");
			}
		} catch (Exception e) {
			setTip(e.getMessage());
		}
		return SUCCESS;
	}


3、持久层LoginDaoImpl类中添加一个验证用户名方法,其他的跟之前的博客写的改改
public boolean validateName(String name){
		try {
			List list=(List) getHibernateTemplate().find("from Login a where a.username = ?",name);
			if(list!=null && list.size()>0){
				return true;
			}else{
				return false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
这里要特别说明一下,from后面的Login是我们的实体类,并不是表名字,我一开始写的是login(表名字),调试中发现当执行到这一句是说tomcat报login没有映射的错误

4、配置文件在此就不多说了,关键说下struts配置,需要继承json-default包,做点小改动,改为:
extends="json-default,struts-default"
<action name="ValidateName" class="validateNameAction">
			<result type="json"></result>
		</action>
result类型设为json


5、测试,输入数据库里已经存在的用户名页面提示用户名已存在,不用注册

相关文章

JS原生Ajax操作(XMLHttpRequest) GET请求 POST请求 兼容性问题 利用iframe模拟ajax 实现表单提交的返回...
AJAX 每日更新前端基础,如果觉得不错,点个star吧 &#128515; https://github.com/WindrunnerMax/E...
踩坑Axios提交form表单几种格式 前后端分离的开发前后端, 前端使用的vue,后端的安全模块使用的SpringSe...
很早就听闻ajax的名声,但是却一直不知道怎么用,今天自己捣鼓了一下,竟然会用了,哈哈哈哈。 为了防止...
需要在服务器上进行哈 jquery的ajax方法: // jquery请求 $.ajax({ url: &quot;./server/slider.js...
Ajax函数封装ajax.js // Get / Post // 参数 get post // 是否异步 // 如何处理响应数据 // URL // var...