【发布时间】:2021-08-01 08:19:06
【问题描述】:
我想在 ajax 中立即从表单中获取一个对象。对象有名称的地方,布尔值。但是在转移之后,在Controller中由于某种原因它带有空字段。
这里是 HTML 代码:
<form id="profileStats" name="profileStats" action="#" th:action="@{/profile/{id}}" th:object="${profileStats}"
method="get">
<div class="photo">
<img src="./static/img/icon.ico" th:src="*{photoPath}" width="200px" height="200px"/>
</div>
<div class="info">
</div>
</form>
控制器,我将对象发送到 HTML:
@GetMapping("/{id}")
public String getProfile(@PathVariable("id") long id, Model model) {
ProfileStats stats = new ProfileStats(userClient.getClient());
model.addAttribute("profileStats", stats);
return "profile";
}
Ajax,我将对象从 HTML 发送到控制器:
function setStatistic() {
var $form = $('#profileStats');
$.ajax({
url: window.location.pathname + '/progress',
method: 'GET',
cache: false,
data: $form.serialize(),
success: function (data) {
$('.info').html(data);
if (data.search("done") >= 0) {
stopProgress();
}
},
error: function (e) {
console.log("error", e)
}
});
}
控制器,我从 AJAX 获取对象:
@GetMapping("/{id}/progress")
public ModelAndView getProgress(@ModelAttribute("profileStats") ProfileStats stats) {
ModelAndView modelAndView;
if (stats.isHaveAllMessage()) {
// HERE I GET NULL EXCEPTION
}
return modelAndView;
}
我做错了什么?
在调试 console.log($form.serialize()) 我什么也没得到
【问题讨论】:
-
您好,您在哪里调用
setStatistic方法?您是否尝试过从调试控制台显式序列化表单?像这样$('#profileStats').serialize()? -
@atish.s 我调用方法
window.onload = setStatistic()。是的,我在问题的最后写了它。我什么也得不到 -
我的意思是在页面加载后检查页面并在调试控制台中执行
$('#profileStats').serialize()以查看结果或错误。