AJAX调用失败时出现未定义的Javascript错误
我有一个SpringMVC控制器被AJAX调用并返回JSON。如果调用成功且没有错误,我将返回一条带有键“message”的字符串消息。同样,如果捕获到异常,我也会返回一个字符串错误,并使用键“message”。我还返回一个HTTP错误响应 在我的Javascript中,我在警报中输出这个“消息”。如果呼叫成功,警报将显示消息。如果调用不成功,我会得到一个Javascript错误“数据未定义”AJAX调用失败时出现未定义的Javascript错误,java,jquery,ajax,spring-mvc,Java,Jquery,Ajax,Spring Mvc,我有一个SpringMVC控制器被AJAX调用并返回JSON。如果调用成功且没有错误,我将返回一条带有键“message”的字符串消息。同样,如果捕获到异常,我也会返回一个字符串错误,并使用键“message”。我还返回一个HTTP错误响应 在我的Javascript中,我在警报中输出这个“消息”。如果呼叫成功,警报将显示消息。如果调用不成功,我会得到一个Javascript错误“数据未定义” 为什么成功时可以访问“数据”,但呼叫失败时不能访问“数据”,我需要进行哪些更正才能使其正常工作 我是S
@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;
}
@RequestMapping(value=“/getMovieData”,method=RequestMethod.POST,products=“application/json”)
@应答器
公共映射getMovieData(@RequestBody映射json,HttpServletResponse){
字符串movieId=json.get(“id”).toString();
Map rval=new HashMap();
试一试{
Movie Movie=movieService.getMovieData(movieId);
rval.put(“消息”,“您已成功”);
rval.put(“电影”,电影);
}捕获(例外e){
response.setStatus(HttpServletResponse.SC_BAD_请求);
rval.put(“message”,“您有一个错误-”+e.getMessage());
}
返回rval;
}
爪哇岛
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);
});
}
函数getMovieData(数据){
var请求=$.ajax({
键入:“POST”,
url:“”,
数据类型:“json”,
contentType:“应用程序/json;字符集=utf-8”,
数据:数据,
});
请求完成(功能(数据){
警报(“成功:+data.message”);
populateMovieFields(data.movie);
});
请求失败(功能(xhr、状态、错误、数据){
警报(“状态:+状态”);
警报(“错误:+错误”);
警报(“失败:+data.message”);
});
}
JSON响应在作为第一个参数传递的
jqXHR
对象中可用
request.fail(function(jqXHR, textStatus, errorThrown) {
alert("Fail: " + jqXHR.responseJSON.message);
});
除了您的服务器响应之外,还可能由于许多原因触发失败。首先,不要假设失败回调中是json。这可能是由连接错误、超时等引起的。如果数据存在,则需要对数据进行类型检查。此外,json解析错误也会触发失败。谢谢。我很好奇为什么会这样。我猜响应对象(在我的例子中是“数据”)被Spring或Tomcat包装在xhr对象中,即使发生错误?是这样吗?实际上,正确的参数是
jqXHR、textStatus、errorhorn
。响应不会作为参数直接注入fail
处理程序。我更新了答案以避免混淆。您可以查看以了解更多信息