我正在尝试在创建更改密码页面时验证用户名和其他字段。问题是Jquery脚本中的AJAX调用没有命中我的controller.i尝试在ajax请求的url字段中给出硬编码路径。 以下是我的剧本
此checkUname函数正在从其中一个输入字段触发onblur事件。
<script type="text/javascript">
function checkUname()
{
// get the form values
var uName = $('#username').val();
var secQues = $('#secQues').val();
var secAns = $('#secAns').val();
var dataObject = JSON.stringify({
'uName' : uName,
'secQues': secQues,
'secAns' : secAns
});
$.ajax({
url:"validateCredentials.do" ,
type: "POST" ,
data: dataObject ,
contentType: "application/json; charset=utf-8" ,
dataType : 'json' ,
success: function(response)
{
alert(response);
} ,
error: function()
{
alert('Error fetching record.... Sorry..');
}
});
}
</script>
这是我的MVC控制器
@Controller
public class ArsController
{
@RequestMapping(value="validateCredentials.do", method = RequestMethod.POST)
public String changePass(@RequestParam("uName") String uName ,@RequestParam("secQues")String secQues,
@RequestParam("secAns") String secAns)
{
System.out.println("AJAX request");
Users dummyUSer = null;
String msg = null;
try
{
dummyUSer = servObj.findUser(uName);
}
catch (ArsException e)
{
System.out.println("error occurred while validating user data during password change");
e.printStackTrace();
}
if(dummyUSer == null)
{
msg = "No user exists with this username";
}
else
{
if(!secQues.equals(dummyUSer.getSecQues()))
{
msg = "Security question is not correct";
}
else
{
if(!secAns.equals(dummyUSer.getSecAns()))
{
msg = "Security answer does not match";
}
}
}
return msg;
}
答案 0 :(得分:2)
您应该使用String,而不是在控制器中使用RequestParam。因为当我们发布JSON数据时,它不会作为Request中的单个参数,而是在控制器中作为String接收。获得String后,将其转换为JSON对象,然后相应地获取值。
答案 1 :(得分:0)
尝试删除内容类型和数据类型。 您没有发送应该在对象中解析的json,而是发送控制器的参数。 这样做的方法是在Ajax的数据中使用一个对象(正如你所做的那样),但是没有内容类型或数据类型说'&34;我发送一个json参数&#34 ;