首页 > 解决方案 > 对 spring-mvc 控制器的 AJAX 发布请求中的未知错误

问题描述

我正在使用 Spring-MVC 4.3.7 并尝试使用 AJAX 发布请求在 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 天,我尝试了许多不同的解决方案,但我无法让它工作。谢谢!

标签: jqueryajaxspring-mvc

解决方案


我找到了解决问题的方法:

第一个问题是在使用 dataType 的 Ajax 请求中,我在这里找到了解决方案和解释 https://stackoverflow.com/a/6186905/10236226

第二个问题是我忘记在 Modal 的 formData 中添加 userId,所以添加此代码后:

id: $("#modalId").data('id')

一切正常,发送的数据保存到mysql。如果将来,我希望这可以帮助某人。


推荐阅读