【发布时间】: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" > Apache Tomcat/8.0.27
", status: 400, statusText: "Bad Request"} 是的,我预计会出现一系列错误。
标签: javascript jquery ajax validation