您的位置:首页 > Web前端 > JavaScript

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

2015-07-31 16:00 399 查看
这里想实现的功能大概是这样:类似注册时,用户名已经被注册了的情况。当用户失去焦点的时候利用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、测试,输入数据库里已经存在的用户名,页面提示用户名已存在,不用注册

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: