如何使用Jquery处理服务器端错误?
这是我的情景。我最初必须验证我的JSO表格。为此我从jquery使用.validate()
。完成所有这些验证后,当我点击提交时,我必须验证userId
和pwd
字段。如果成功,我转到确认页面保留在同一页面并显示内联错误。为实现此目的,我不想重新加载,但希望使用jquery
/ ajax
选项。我尝试了以下代码,但它不起作用。
jQuery(document).ready(function () {
//...
..//
$("#aID").validate({
rules: {
reason: "required",
aic: "required",
pwd: {
required: true,
remote: function() {
remote: {
url: "${pageContext.request.contextPath}/tax/pwdChkAjax.do",
dataType: "post",
data: {
pwd: function() {
return $("#pwd").val();
}
},
success: function(data) {
alert("111");
}
}
}
},
messages: {
reason:"Please select a reason code.",
aic: "Please select a credit AIC."
},
submitHandler: function(form) {
if (aLen.length == 0)) {
$('#pDiv').text('Please enter password.');
$("#pwd").focus();
return false;
}
var options = {
url: "${pageContext.request.contextPath}/abc/aTax.do",
beforeSubmit: function (data, set, options) {
alert("Inside beforesubmit");
},
success: function (param1, param2, param3) {
},
error: function (param1, param2, param3)
{
alert(param3);
if (param3 == "Unauthorized")
$('#aDiv').text('Invalid Password');
if (param3 == "Forbidden")
$('#cDiv').text('Invalid 2nd Password');
}
};
// submit the form
$(form).ajaxSubmit(options);
return false;
}
});
});
<form:form id="aID" action="aTax.do" commandName="aForm">
<DIV class="btn-group">
<button id="submitId" type="submit" class="defaultButton">Submit
</button>
<button id="resetId"
type="reset" class="defaultButton">Reset
</button>
</DIV>
</form:form>
控制器类
@RequestMapping(value="/abc/aTax.do", method=RequestMethod.POST)
public String aTax(@Valid aForm command, BindingResult result,
Model model, HttpServletRequest request , HttpServletResponse response) throws Exception {
//...
pwdAuthenticate();
..//
return "aTaxConfirm";
}
private void authenticateUser(User user, AForm aForm, HttpServletResponse response) throws Exception
{
try{
userAuthenticateService.authenticateUser(aForm.getId(), aForm.getPwd());
}catch(AException e) {
System.out.println("Exception is ...."+e);
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
}
}
@RequestMapping(value="tax/pwdChkAjax.do", method=RequestMethod.POST)
private Boolean pwdChkAjax(String pwd, HttpServletResponse response) throws Exception
{
try{
userAuthenticate.authenticate("abc", pwdOverride);
} catch (AuthenticationException e) {
return false;
}
return true;
}
映射:
<definition name="aTaxConfirm" extends="baseTransLayout" >
<put-attribute name="heading" value="Tax Confirmation" />
<put-attribute name="body" value="/WEB-INF/view/jsp/abc/aTaxConfirm.jsp" />
</definition>
答案 0 :(得分:0)
你有一个迷路的大括号。
$("#aID").validate({
rules: {
reason: "required",
aic: "required"
} // <- REMOVE THIS
},
messages: {
reason:"Please select a reason code.",
aic: "Please select a credit AIC."
},
....
这应该给你一个控制台错误。
完成所有这些验证后,当我点击提交时,我必须验证userId和pwd字段。
为什么验证完成后?您应该使用the remote
method来验证userId
和pwd
字段以及所有其他字段验证。
根据此评论进行编辑以回应“究竟做什么”不起作用“是什么意思?”
我的意思是验证工作正常,userId和pwd验证也会发生。 Controller返回视图。我将更新控制器代码。完成后,页面不会呈现,只是保持提交。
那是因为您的submitHandler
代码未提交表单。它只是通过Ajax提交登录凭据。每当您使用submitHandler
选项时,您完全屏蔽并覆盖action
属性设置的默认form
网址。
如果您采用以前的建议并使用remote
方法评估登录凭据以及其他字段,则可以完全删除submitHandler
。
将发生以下情况:
根据规则验证所有字段。使用remote
规则的登录名和密码字段将通过Ajax自动评估。
当表单通过验证时,它会根据您的action
属性正常“提交”,并且该页面将重新加载到此action
网址,并根据您的脚本显示您的视图这个网址。
关于remote
方法的说明:
true
,则此字段将通过验证。false
,undefined
或null
,则此字段将无法通过验证,并将使用默认验证错误消息。