在jQuery中使用$ .post获取jqXHR状态的最佳方法

时间:2013-12-04 11:52:51

标签: jquery ajax post

我找到了这个主题(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个代码并在所有代码中处理。

有什么想法吗?

1 个答案:

答案 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,但要获得它并不难,而且它更具可扩展性。