日期:2014-05-17  浏览次数:20682 次

使用jquery的ajax和servlet交互的问题
前台ajax代码:
$.ajax({ 
  type: "POST", 
  url:"/OnLineTest01/servlet/admin_account_updatePwd", 
  data:{original:$("#original").val(),freshF:$("#freshF").val(),freshS:$("#freshS").val()},  
  success: function(msg){
  alert(msg);
  },  
  error: function(){ 
  alert("未知异常,请稍后再试!"); 
  } 
  }); 


后台servlet处理代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String updateResult = null;
PrintWriter out = response.getWriter(); 
String original = request.getParameter("original");
String freshF = request.getParameter("freshF");
String freshS = request.getParameter("freshS");

//检测格式及正确性
if(original==null || !original.matches("\\w{5,}")||freshF==null ||
!freshF.matches("\\w{5,}")||freshS==null || !freshS.matches("\\w{5,}")) { //密码至少5位,由数字/字母/下划线组成
updateResult = "密码至少5位,由数字/字母/下划线组成!";
}else if(!freshF.equals(freshS)){
updateResult = "新密码两次输入不同!";
}

if(updateResult==null) {
MD5Code code = new MD5Code();
original = code.getMD5ofStr(original);//数据库中存储加密后的密文
HttpSession session = request.getSession();
Teacher t = (Teacher)session.getAttribute("teacher");
if(t==null) {
updateResult = "账号超时,请重新登录!";
}else {
if(!original.equals(t.getPassword())) {
updateResult = "原密码错误!";
}else {//校验结果正确,可以更新密码
String fresh = code.getMD5ofStr(freshF);//产生新的存储到数据库的密文
//存入数据库
TeacherServiceImp teacherService = new TeacherServiceImp();
boolean result = teacherService.updatePwd(fresh, t.getUserId());
if(result) {
//修改session中teacher对象密码信息
t.setPassword(fresh);
session.setAttribute("teacher", t);
updateResult = "密码更新成功!";
}else {
updateResult = "服务异常,密码更新失败!";
}
}
}
}
System.out.println("updateResult"+updateResult);
out.write(updateResult);
}

问题:这段代码每次都有执行,而且都会正确输出updateResult的值,但是在前台的ajax代码有时候能接收到服务端返回的值,有时候又不能,有时候把服务端的代码位置调整下又会有然后过段时间有没有了,请高手帮帮哈。

------解决方案--------------------
唯一可能存在问题的是,你没有在response中写关于 contentType 等信息。

Ajax偶然确实会接收不到数据,但是发生概率很低,而且主要是网络因素。

听你的说法,如果频度较高,就显得比较怪异了。考虑可以专门对这个接口做下压力测试做个检查。