Kle*_*ota 5 ajax jquery spring spring-mvc http-status-codes
在我当前的 spring 项目中,当我向服务器提交表单时,响应由以下方法处理:
$('form.form').each(function () {
var form = this;
$(form).ajaxForm(function (data) {
form.reset();
$(".alert-info").find("#alert").html(data);
$(".alert-info").show();
});
});
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,提交是由这样的方法处理的:
@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");
}
Run Code Online (Sandbox Code Playgroud)
来自控制器的方法的错误响应由这个 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法从我的 jquery 代码中的响应(可以是 1xx、2xx、3xx、4xx 或 5xx)中读取 http 状态代码,并根据此代码显示相关消息。
在浏览器的网络监视器中,我可以看到一个成功的响应已经在方法中实现了代码 HTTP 201;发生错误时,响应应具有代码 4xx 或 5xx,具体取决于触发的异常。
这样,我想知道是否有人可以提示如何修改我的 jquery 代码和我的 COntrollerAdvice 来完成此操作。
像这样:
$.ajax({
type: "post", url: "/SomeController/SomeAction",
success: function (data, text) {
//...
},
error: function (request, status, error) {
alert(request.responseText);
}
});
Run Code Online (Sandbox Code Playgroud)
例如
error: function(xhr,err){
alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status);
alert("responseText: "+xhr.responseText);
}
Run Code Online (Sandbox Code Playgroud)
xhr 是 XmlHttpRequest 的缩写。
readyState:值为 1:loading, 2:loaded, 3:interactive, 4:complete
status: HTTP 状态号,如 404 not found, 500 internal server error, 200: ok (warning: special IE problem value: 0 cancelled)
responseText:来自服务器的响应 - 这可能是您的自定义状态文本(确保状态代码不是 200 OK)
如果您想在成功时检查状态,请始终使用:
var jqxhr = $.ajax( "example.php" )
.done(function (data) { alert(data); })
.fail(function (jqXHR, textStatus, errorThrown) { someErrorFunction(); })
.always(function() { alert("complete"); });
Run Code Online (Sandbox Code Playgroud)
另外,请参阅有关使用成功、错误和完成与 .done()、.fail() 和 always() 的 jQuery ajax() 的关于 success-error-complete vs. done-fail-always
() 的帖子
如果要在页面上设置全局错误处理,请使用 ajaxSetup:http :
//www.unseenrevolution.com/jquery-ajax-error-handling-function/
看起来您正在使用jQuery Form Plugin。如果是这样,回调函数的第三个参数就是xhr对象,您可以像这样获取 HTTP 状态:
$(form).ajaxForm(function (data, statusText, xhr) {
alert(xhr.status);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31511 次 |
| 最近记录: |