我找到了这个主题(How to get response status code from jQuery.ajax?),其中解释了如何获得返回状态,但我使用的是$.post
,这使得它有点不同。
我有以下代码:
$(function() {
$('#update_marker').submit( function(e) {
e.preventDefault();
$.post($("#update_marker").attr("action"), $("#update_marker").serialize(), function(data) {
if( $.trim(data).indexOf('<')==0 ) {
new Messi( lang['dist_general_error'], {title: 'Ops...', titleClass: 'anim error', buttons: [{id: 0, label: 'Fechar', val: 'X'}]});
} else {
var json = $.parseJSON( data );
if( json.status=="success" ) {
new Messi( json.msg );
} else {
new Messi( json.msg, {title: 'Ops..', titleClass: 'anim error', buttons: [{id: 0, label: 'Fechar', val: 'X'}]});
}
}
});
return false;
});
});
所以我想我会将$.post
调用更改为
$.post($("#update_marker").attr("action"), $("#update_marker").serialize(), function(data, textStatus, jqXHR) {
如果我得到jqXHR.status
代码= 200,它就可以工作。但是当状态= 500时,我什么也得不到。
我正在努力通过最少的代码更改实现这一点,因为我有很多像这样的函数,我需要能够捕获500个代码并在所有代码中处理。
有什么想法吗?
答案 0 :(得分:5)
jQuery帖子仅将success
作为参数。只有成功的ajax请求才会调用成功处理程序。如果请求返回500,则永远不会执行成功处理程序,即回调。
要附加错误处理程序,您可以在.fail
后链接.post
或切换到更广泛的$.ajax
。
第一个选项意味着您可以像这样添加.fail来修改代码
$(function() {
$('#update_marker').submit( function(e) {
e.preventDefault();
$.post($("#update_marker").attr("action"), $("#update_marker").serialize(), function(data) {
if( $.trim(data).indexOf('<')==0 ) {
new Messi( lang['dist_general_error'], {title: 'Ops...', titleClass: 'anim error', buttons: [{id: 0, label: 'Fechar', val: 'X'}]});
} else {
var json = $.parseJSON( data );
if( json.status=="success" ) {
new Messi( json.msg );
} else {
new Messi( json.msg, {title: 'Ops..', titleClass: 'anim error', buttons: [{id: 0, label: 'Fechar', val: 'X'}]});
}
}
}).fail(function () { console.log("I errored!"); });
return false;
});
});
我建议习惯于$.ajax
,但要获得它并不难,而且它更具可扩展性。