【发布时间】:2016-01-22 10:51:16
【问题描述】:
我有一个被 AJAX 调用并返回 JSON 的 Spring MVC 控制器。如果调用成功且没有错误,我将返回带有键“message”的字符串消息。同样,如果捕获到异常,我也会返回带有键“消息”的字符串错误。我还返回一个 HTTP 错误响应。
在我的 Javascript 中,我在警报中输出此“消息”。如果呼叫成功,警报会显示消息。如果调用不成功,我会收到“数据未定义”的 Javascript 错误。
- 为什么“数据”在成功时可访问,但在调用失败时无法访问,我需要进行哪些更正才能使其正常工作?
- 我是使用 Spring 进行 AJAX 调用的新手,因此欢迎和感谢对下面我的解决方案的任何一般性反馈/批评。
注意Javascript 中的警报和消息本身是虚拟实现,直到我通过修改 DOM 正确地提供用户反馈。
控制器
@RequestMapping(value = "/getMovieData", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public Map<String, Object> getMovieData(@RequestBody Map<String, Object> json, HttpServletResponse response) {
String movieId = json.get("id").toString();
Map<String, Object> rval = new HashMap<String, Object>();
try {
Movie movie = movieService.getMovieData(movieId);
rval.put("message", "You have succeeded");
rval.put("movie", movie);
} catch (Exception e) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
rval.put("message", "You have an error - " + e.getMessage());
}
return rval;
}
Javascipt
function getMovieData(data) {
var request = $.ajax({
type : 'POST',
url : '<c:url value="/getMovieData" />',
dataType : "json",
contentType : "application/json; charset=utf-8",
data : data,
});
request.done(function(data) {
alert("Success: " + data.message);
populateMovieFields(data.movie);
});
request.fail(function(xhr, status, error, data) {
alert("status: " + status);
alert("error: " + error);
alert("Fail: " + data.message);
});
}
【问题讨论】:
-
fail 可能由于服务器响应以外的许多原因触发。首先不要假设它是失败回调中的 json。它可能是由连接错误、超时等引起的。需要对数据是什么进行一些类型检查,如果它甚至存在的话。 json解析错误也可以触发失败
标签: java jquery ajax spring-mvc