struts2使用json格式的问题,返回格式总是不对
业务描述:用户管理:添加新用户时判断该用户名是否已经存在,
技术支持:框架:struts2,spring2.5,Ibatis2
实现功能:判断用户是否存在,使用ajax提交,返回json格式数据,jsp页面提取json数据并显示
代码描述:
jsp:页面如下:
- Java code
<tr> <td width="20%" align="right"> 帐号: </td> <td style="width:205px;"> <input type="text" value="" name="users.loginName" class="inputcss" datatype="s6-18" ajaxurl="<%=basePath %>login/checkUserExist.action" nullmsg="请输入用户名!" errormsg="帐号至少6个字符,最多18个字符,只能是数字字母下划线!" /> </td>[code=Java]
<td><div class="Validform_checktip">帐号至少6个字符,最多18个字符</div></td>
</tr>[/code]
响应请求的js代码如下:
- Java code
$(".addUserform:eq(0)").Validform({ tiptype:2, ajaxPost:true, callback:function(s){ //返回数据data是json格式,{"info":"demo info","status":"y"} //info: 输出提示信息; //status: 返回提交数据的状态,是否提交成功。如可以用"y"表示提交成功,"n"表示提交失败,在ajax_post.php文件返回数据里自定字符,主要用在callback函数里根据该值执行相应的回调操作; //你也可以在ajax_post.php文件返回更多信息在这里获取,进行相应操作; //这里执行回调操作; var data = eval(s); if(data.status=="y"){ setTimeout(function(){ $.Hidemsg(); //公用方法关闭信息提示框; },2000); } } });这是在网上找的例子,jquery实现的,其中的jquery的验证js如下,直截取了对本次有用 的代码:
- Java code
if($(this).attr("ajaxurl")){ var inputobj=$(this); inputobj.attr("valid",tipmsg.c); $.fn.Validform.sn.showmsg(tipmsg.c,settings.tiptype,{obj:inputobj,type:1,sweep:settings.tipSweep},"hide"); $.ajax({ type: "POST", url: inputobj.attr("ajaxurl"), data: "param="+$(this).val()+"&name="+$(this).attr("name"), dataType: "text", success: function(s){ if(s=="y"){ inputobj.attr("valid","true"); errorobj=null; $.fn.Validform.sn.showmsg(tipmsg.r,settings.tiptype,{obj:inputobj,type:2,sweep:settings.tipSweep},"hide"); }else{ inputobj.attr("valid",s); errorobj=inputobj; $.fn.Validform.sn.showmsg(s,settings.tiptype,{obj:inputobj,sweep:settings.tipSweep}); } }, error: function(){ inputobj.attr("valid",tipmsg.err); errorobj=inputobj; $.fn.Validform.sn.showmsg(tipmsg.err,settings.tiptype,{obj:inputobj,sweep:settings.tipSweep}); } });返回json格式,有个datatype配置,网上下来的是text格式,不知道改了json是什么意思,但是我改了json后,js提交出错
其中的ajaxurl就是要提交的请求路径。
action代码如下:
- Java code
/** * 检查该用户名是否可用 * @return * @throws IOException */ public void checkUserExist() throws Exception{ String param = request.getParameter("param");// System.out.println("传入的参数值为:"+param); users = new Users(); users.setLoginName(param); //查询该用户名 int c = userService.checkUserHasExist(users); System.out.println(c); if(c!=0){ JSONArray jsonObj = JSONArray.fromObject("[{info:'该用户名已存在,请重新输入!',status:'n'}]"); writeJson(jsonObj.toString()); }else{ JSONArray jsonObj = JSONArray.fromObject("[{info:'该用户名可以使用!',status:'y'}]"); writeJson(jsonObj.toString()); } }
流程如下:添加用户时ajax提交到action查询该用户是否存在,不存在可以添加,否则提示已存在不能添加,并显示提示信息
使用jquery,返回json格式数据,
但是我在写的时候,业务对了,但是总是得不到json格式的数据,在jsp页面总是显示如下
“[{"status":"n","info":"该用户名已存在,请重新输入!"}]”
按说应该只显示该用户名已存在的,但是现在总是显示这个格式。而且当用户名不存在时,还是不能提交,form表单无法提交,sratus 就是指验证的ajaxurl提交状态,y表示成功,n表示失败,原文是这么说的
“header("Content-Type:text/html; charset=utf-8");
//sleep(3);
//表单数据是以POST方式提交过来;
//注意json数据必须严格按如下格式输出:{"info":"demo info","status":"y"};
//info: 输出提示信息;
//status: 返回提交数据的状态,是否提交成功。“y”表示提交成功,“n”表示提交失败,在callback函数里可以根据该值执行相应的回调操作;
echo '{
"info":"数据已成功提交!",
"status":"y"
}';”
现在的问题是:如何用struts2返回json格式,而且使用了jquery,请大家帮我看看我的问题哪里不对,需要看什么代码,再和我说,我觉得能出问题的代码我都贴出来了, 希望大家帮帮我,好认真的发这个贴。
[解决办法]
“[{"status":"n","info":"该用户名已存在,请重新输入!"}]”
===============================================================
你这叫json字符串,必须转换成json对象
[解决办法]
eval("("+json+")")是这样用~~~
[解决办法]
汗现在的新人都是这样,问题还没解决先闪人了。
[解决办法]
eval("("+json+")")是这样用~~~