初学Ajax,对于前端的function函数中的参数有疑问,这个参数是否必须跟后台返回的json等数据的key值必须一致还是说随意命名即可。对着一个项目各种改动发现都没法生效,也验证不了我的想法。
搜了一些资料理论如下:
function中的参数就是后台返回回来的数据,以json类型的数据为例,那么得到的就是后台返回过来的json数据,如何得到后台返回的json,就是该参数.json的key
.如下代码举例说明。
前端Ajax代码
$.ajax({
type:"GET",
url:path+"/jsp/user.do",
data:{method:"pwdmodify",oldpassword:oldpassword.val()},
dataType:"json",
success:function(kkkdare){
if(kkkdare.rel == "true"){//旧密码正确
validateTip(oldpassword.next(),{"color":"green"},imgYes,true);
}else if(kkkdare.rel == "false"){//旧密码输入不正确
validateTip(oldpassword.next(),{"color":"red"},imgNo + " 原密码输入不正确",false);
}else if(kkkdare.rel == "sessionerror"){//当前用户session过期,请重新登录
validateTip(oldpassword.next(),{"color":"red"},imgNo + " 当前用户session过期,请重新登录",false);
}else if(kkkdare.rel == "error"){//旧密码输入为空
validateTip(oldpassword.next(),{"color":"red"},imgNo + " 请输入旧密码",false);
}
},
error:function(data){
//请求出错
validateTip(oldpassword.next(),{"color":"red"},imgNo + " 请求错误",false);
}
});
后端的servlet代码
public void pwdModify(HttpServletRequest req, HttpServletResponse resp){
//拿到session
User userSession = (User) req.getSession().getAttribute(ConstantField.USER_SESSION);
String oldpassword = req.getParameter("oldpassword");
Map<String,String> resultMap = new HashMap<String,String>();
if(userSession == null ){//session过期了
//resultMap.put("result","sessionerror");
resultMap.put("rel","sessionerror");
}else if(StringUtils.isNullOrEmpty(oldpassword)){//旧密码为空
resultMap.put("rel","error");
}else {
if(oldpassword.equals(userSession.getUserPasswd())){//旧密码输入正确
resultMap.put("rel","true");
}else {//旧密码输入不正确
resultMap.put("rel","false");
}
}
resp.setContentType("application/json");
String jsonString = JSON.toJSONString(resultMap);
try {
PrintWriter writer = resp.getWriter();
writer.write(jsonString);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
前端的function(kkkdare)
函数中的参数随便命名,只要后台返回的json的key值跟kkkdare.key一致就行了。以上述代码为例,只要kkkdare.rel跟后台的json键值对的key命名一致就行,都叫rel/result...都行。
初学者如果换个命名发现无法使用,清空浏览器的缓存即可。