【发布时间】:2023-03-13 08:56:01
【问题描述】:
我通过使用 @ResponseBody 注释将来自控制器的数据作为 Json 传递。我的问题是 ajax 无法识别来自我的控制器的数据。当我检查 ajax 中的typeof 数据时,它告诉我它是undefined。
@RequestMapping(value = "/basic/Json", method = RequestMethod.POST)
public @ResponseBody JsonResponse addCertJson(@Valid @ModelAttribute CertificateProgramme certificate, BindingResult result, Principal principal, Locale locale, MessageSource messageSource) {
JsonResponse res = new JsonResponse();
User user = (User) ((UsernamePasswordAuthenticationToken) principal).getPrincipal();
certificate.setUser(user);
if(!result.hasErrors()){
res.setStatus("SUCCESS");
}else{
res.setStatus("FAIL");
List<FieldError> allErrors = result.getFieldErrors();
List<ErrorMessage> errorMesages = new ArrayList<ErrorMessage>();
for (FieldError objectError : allErrors) {
errorMesages.add(new ErrorMessage(objectError.getField(), objectError.getField() + " " + objectError.getDefaultMessage()));
}
res.setErrorMessageList(errorMesages);
}
certificateService.save(certificate);
return res;
}
表格
<form method="post" th:object="${certificate}"
th:action="@{${action1}}" modelAttribute="employee" class="form-inline inline new-item editCert">
<input type="hidden" th:field="*{id}"/>
<div th:replace="common/layout :: flash"></div>
<div class="error" ></div>
<fieldset>
<legend th:text="${heading}"> Personal Information</legend>
<div class="row" th:classappend="${#fields.hasErrors('fullName')}? 'error' : ''">
<input type="text" id="fullName" class="form-control input-sm" th:field="*{fullName}"
placeholder="Full Name example Jane Doe"/>
<div class="error-message" th:if="${#fields.hasErrors('fullName')}" th:errors="*{fullName}"></div>
</div>
<div class="row" th:classappend="${#fields.hasErrors('gender')}? 'error' : ''">
<select th:field="*{gender}" class="form-control input-lg ">
<option value="">[Select Gender]</option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
<div class="error-message" th:if="${#fields.hasErrors('gender')}" th:errors="*{gender}"></div>
</div>
jQuery 文件
var $form = $('.editCert');
var formData = $form.serialize();
$form.on('submit',function(e){
e.preventDefault();
$.ajax(url,{
dataType: 'json',
data: data,
type: "POST",
}).done(function(response){
if(response.status === 'SUCCESS'){
console.log('I am Okay' + response);
}else{
console.log('Error');
}
}).fail(function(res){
errorInfo = "";
for(i =0 ; i < res.errorMessageList.length ; i++){
errorInfo += "<br>" + (i + 1) +". " + response.errorMessageList[i].code;
}
$('.error').html("Please correct following errors: " + errorInfo);
});
});
错误
Uncaught TypeError: Cannot read property 'length' of undefined
【问题讨论】:
-
在您向我们展示
data来自的外部范围之前,我们无法为您提供帮助 -
@luboskrnac 我添加了外部范围
-
什么是响应体? . 使用 firebug 或 chrome 网络查看
标签: java jquery json ajax spring-boot