我正在使用Spring-MVC 4.3.7并尝试使用AJAX post请求在JSP中编辑用户数据并将结果保存在mySql中。表单采用Bootstrap模式。
我可以将表单数据发送到Spring控制器(更改的用户数据打印在服务器日志中)但AJAX始终显示错误警报,并且控制器不会更新mySql中的用户数据。
<form id="editForm">
<div class="form-group">
<label for="editName">Name</label>
<input type="text" class="form-control" name="editName" id="editName" value="">
</div>
<div class="form-group">
<label for="editUsername">Username</label>
<input type="text" class="form-control" name="editUsername" id="editUsername" value="">
</div>
<div class="form-group">
<label for="editRole">Role</label>
<select id="editRole">
<option value="0">User</option>
<option value="1">Admin</option>
</select>
</div>
<div class="modal-footer">
<div class="btn-group btn-group-justified" role="group" aria-label="group button">
<div class="btn-group" role="group">
<button type="button" class="btn btn-
danger" data-dismiss="modal" role="button">Close</button>
</div>
<div class="btn-group" role="group">
<button type="submit" class="btn btn-
success btn-hover-green">Save</button>
</div>
</div>
</div>
</form>
$("#editForm").submit(function(event) {
// Prevent the form from submitting via the browser.
event.preventDefault();
// PREPARE FORM DATA
var formData = {
name: $("#editName").val(),
username: $("#editUsername").val(),
role: $("#editRole").val()
};
var dataJson = JSON.stringify(formData);
$.ajax({
type: "POST",
contentType: "application/json",
url: "../admin/editUser",
data: dataJson,
dataType: 'json',
success: function(data) {
alert("Success");
console.log(data);
},
error: function(e) {
alert("Error!");
console.log(e);
}
});
});
@Autowired
UserService userService;
@RequestMapping(value = "admin/editUser", method = RequestMethod.POST)
public @ResponseBody void handleEditUser(@RequestBody User cmd) {
try {
System.out.println(cmd.getName());
System.out.println(cmd + "done");
userService.updateUser(cmd);
} catch (DuplicateKeyException ex) {
ex.printStackTrace();
}
}
我测试了updateUser
方法,它工作正常。
我希望有人可以帮我解决问题的解决方案和解释,我在这个错误上坚持了2天,我尝试了很多不同的解决方案,但我无法让它工作。谢谢!
我找到了解决问题的方法:
第一个问题是在Ajax请求中使用dataType我在这里找到解决方案和解释https://stackoverflow.com/a/6186905/10236226
第二个问题是我忘了在Modal的formData中添加userId,所以在添加这段代码之后:
id: $("#modalId").data('id')
一切正常,发送的数据保存到mysql。我希望如果未来这可以帮助别人。