【问题标题】:Best way to obtain jqXHR status using $.post in jQuery在 jQuery 中使用 $.post 获取 jqXHR 状态的最佳方法
【发布时间】:2013-12-04 11:52:51
【问题描述】:

我发现了这个主题 (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 个代码并处理所有代码。

有什么想法吗?

【问题讨论】:

标签: jquery ajax post


【解决方案1】:

jQuery post 只接受success 作为参数。成功处理程序仅在成功的 ajax 请求上调用。如果请求返回 500,则永远不会执行成功处理程序,即您的回调。

要附加错误处理程序,您可以在.post 之后链接.fail 或切换到更广泛的$.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,它并不难掌握,而且可扩展性更强。

【讨论】:

  • 是的,因为$.post() 返回一个延迟对象,.error() 方法在这里是可链接的。
  • .error() 已弃用,请改用 .fail() 或 .then(success,error)
  • 好的,我做到了,而且成功了。但是有些奇怪,当我模拟返回码 500 时,它工作正常并调用 .fail()。但是当我模拟一个 PHP 错误,比如调用一个无效对象时,返回码是 200,它也调用fail。为什么?
猜你喜欢
  • 2020-08-01
  • 2018-08-26
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2020-09-28
  • 2022-10-06
  • 2012-09-22
  • 2013-09-14
相关资源
最近更新 更多