[英]Get Http Status Code from an ajax response with jquery
In my current spring project, when I submit a form to server, the response is handled by this method: 在我当前的spring项目中,当我向服务器提交表单时,响应由此方法处理:
$('form.form').each(function () {
var form = this;
$(form).ajaxForm(function (data) {
form.reset();
$(".alert-info").find("#alert").html(data);
$(".alert-info").show();
});
});
In my controller, the submission is handled by a method like this: 在我的控制器中,提交由以下方法处理:
@RequestMapping(value="cadastra", method=RequestMethod.POST)
@ResponseBody
@ResponseStatus(HttpStatus.CREATED)
public void cadastra(@ModelAttribute("object") E object, BindingResult result, @RequestParam(value="file", required=false) MultipartFile file, @RequestParam(value="icone", required=false) MultipartFile icone, @RequestParam(value="screenshot", required=false) MultipartFile screenshot[]) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException {
serv.cadastra(object);
serv.upload_picture(object, file, "picture");
serv.upload_picture(object, icone, "icone");
}
Error responses from the methods from the controller are handled by this ControllerAdvice class: 来自控制器的方法的错误响应由此ControllerAdvice类处理:
@ControllerAdvice
@PropertySource({"classpath:error.properties"})
public class GlobalDefaultExceptionHandler {
@Autowired
private Environment env;
@ExceptionHandler(value = Exception.class)
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
// If the exception is annotated with @ResponseStatus rethrow it and let
// the framework handle it - like the OrderNotFoundException example
// at the start of this post.
// AnnotationUtils is a Spring Framework utility class.
if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null)
throw e;
// Otherwise setup and send the user to a default error-view.
ModelAndView mav = new ModelAndView();
mav.addObject("exception", e);
mav.addObject("url", req.getRequestURL());
mav.addObject("msg", e.getLocalizedMessage());
mav.setViewName("erro");
return mav;
}
}
I am looking for a way to read the http status code from response (which can be 1xx, 2xx, 3xx, 4xx or 5xx) in my jquery code, and display a related message according to this code. 我正在寻找一种方法来从我的jquery代码中读取响应中的http状态代码(可以是1xx,2xx,3xx,4xx或5xx),并根据此代码显示相关消息。
In the network monitor from browser, I can see a successful response already have the code HTTP 201 as implemented in the method; 在浏览器的网络监视器中,我可以看到成功的响应已经在方法中实现了代码HTTP 201; when an error occurs, the response should have a code 4xx or 5xx, depending from exception triggered. 发生错误时,响应应具有代码4xx或5xx,具体取决于触发的异常。
In this way, I wonder if anyone can give a hint of how modify my jquery code and my COntrollerAdvice to accomplish this. 通过这种方式,我想知道是否有人可以提示如何修改我的jquery代码和我的COntrollerAdvice来实现这一目标。
It looks like you are using the jQuery Form Plugin . 看起来你正在使用jQuery Form Plugin 。 If so, the third parameter to the callback function is the xhr
object, and you can get the HTTP status like this: 如果是这样,回调函数的第三个参数是xhr
对象,你可以得到这样的HTTP状态:
$(form).ajaxForm(function (data, statusText, xhr) {
alert(xhr.status);
Like this: 像这样:
$.ajax({
type: "post", url: "/SomeController/SomeAction",
success: function (data, text) {
//...
},
error: function (request, status, error) {
alert(request.responseText);
}
});
eg 例如
error: function(xhr,err){
alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status);
alert("responseText: "+xhr.responseText);
}
xhr is short for XmlHttpRequest. xhr是XmlHttpRequest的缩写。
readyState: the values are 1:loading, 2:loaded, 3:interactive, 4:complete readyState:值为1:loading,2:loaded,3:interactive,4:complete
status: the HTTP status number, like 404 not found, 500 internal server error, 200: ok (warning: special IE problem value: 0 cancelled) status:HTTP状态号,如404未找到,500内部服务器错误,200:ok(警告:特殊IE问题值:0已取消)
responseText: the response from the server - this could be your custom status text (make sure the status code is not 200 OK) responseText:来自服务器的响应 - 这可能是您的自定义状态文本(确保状态代码不是200 OK)
If you want to check the status even on success, use always: 如果要在成功时检查状态,请始终使用:
var jqxhr = $.ajax( "example.php" )
.done(function (data) { alert(data); })
.fail(function (jqXHR, textStatus, errorThrown) { someErrorFunction(); })
.always(function() { alert("complete"); });
Also, see this post on success-error-complete vs. done-fail-always 另外,请参阅有关成功 - 错误 - 完成与完成 - 失败 - 总是的这篇文章
jQuery ajax() using success, error and complete vs .done(), .fail() and always() jQuery ajax()使用成功,错误和完整vs .done(),. fail()和always()
If you want to setup a global error handling on the page, use ajaxSetup: 如果要在页面上设置全局错误处理,请使用ajaxSetup:
http://www.unseenrevolution.com/jquery-ajax-error-handling-function/ http://www.unseenrevolution.com/jquery-ajax-error-handling-function/
To get headers and status in response: 获取标题和状态作为响应:
$.ajax({
dataType: "json",
url: url,
data: data
}).done(function(rs, textStatus, xhr) {
console.log(xhr.getResponseHeader('X-CUSTOM-HEADER'));
console.log(xhr.status);
});
see also: Using getResponseHeader with jQuery's ajax method 另请参阅: 使用jQuery的ajax方法使用getResponseHeader
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.