【问题标题】:Jquery AJAX .error produces error "Cannot read property fieldErrors of undefined"Jquery AJAX .error 产生错误“无法读取未定义的属性字段错误”
【发布时间】:2015-10-26 18:03:08
【问题描述】:

我正在构建一个简单的 Spring MVC 应用程序,该应用程序用作 DVD 库。尝试验证表单中的字段时会出现此问题。

产生问题的 AJAX 调用在这里:

$(document).ready(function() {
  $('#add-button').click(function(event) {
    event.preventDefault();
    $.ajax({
      type: 'POST',
      url: 'dvd',
      data: JSON.stringify({
        title: $('#add-title').val(),
        releaseDate: $('#add-releaseDate').val(),
        mpaaRating: $('#add-mpaaRating').val(),
        director: $('#add-director').val(),
        studio: $('#add-studio').val(),
        note: $('#add-note').val(),
        image: $('#add-image').val()
      }),
      headers: {
        'Accept': 'application/json',
        'Content-type': 'application/json'
      },
      'dataType': 'json'
    }).success(function(data, status) {
      $('#add-title').val('');
      $('#add-releaseDate').val('');
      $('#add-mpaaRating').val('');
      $('#add-director').val('');
      $('#add-studio').val('');
      $('#add-note').val('');
      $('#add-image').val('/img/default.jpg');
      $('#validationErrors').empty();
    }).error(function(data, status) {
      $('#validationErrors').empty();
      $.each(data.responseJSON.fieldErrors, function(index, validationError) {
        var errorDiv = $("#validationErrors");
        errorDiv.append(validationError.message).append($("<br>"));
      });
    });
  });
});

我注意到的一件事是,在另一个项目中,代码功能与预期完全相同,响应标头显示了一种 JSON。我的这个项目的代码会生成一个文本类型的响应标头。

这里真正困扰我的是success函数工作得很好。那么为什么错误不起作用呢?

我查看了其他发帖者提出的许多不同问题,但尚未找到解决方案。

【问题讨论】:

  • 您的成功函数根本不引用响应“数据”,但您的错误函数会。这可能就是为什么一个失败而另一个没有。
  • 您的响应消息是什么样的,完全正确。它是 JSON 字符串还是裸字符串?
  • 我将如何获得响应消息?是在 Chrome 开发者工具中的某个地方吗? (我很抱歉不知道。)
  • 如果您看到错误块正在执行,那么您可以放心地假设您的 ajax 失败了。检查 MVC 控制器是否正确处理参数。其次从这一行 $.each(data.responseJSON.fieldErrors, function(index, validationError) { 我假设你期待一个 fieldErrors 数组?你能简单地做 console.log(data) 并检查它正在打印什么吗?
  • .error 中的 console.log(data) 产生:Object {readyState: 4, responseText: " Apache Tomcat/8....line" ><h3>Apache Tomcat/8.0.27</h3>", status: 400, statusText: "Bad Request"} 是的,我预计会出现一系列错误。

标签: javascript jquery ajax validation


【解决方案1】:

我创建了一个新项目,创建了所有新文件,将内容复制并粘贴到新文件中 -> 清理并构建 -> 部署......它工作正常。

我没有对底层代码进行任何更改。我刚刚在我的验证处理程序上注册@ControllerAdvice 时给了 Spring 一个干净的机会。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多