Jquery $ .ajax statusCode Else

Ste*_*eve 23 javascript ajax jquery http-status-codes

在jquery Ajax调用中,我正在处理200和304的statusCode.但我也定义了"错误""捕获可能返回的任何错误.

如果存在相关的验证消息,则返回状态代码400 - 错误请求.

然后在进入我定义的statusCode"400"函数之前进入"错误"函数.这意味着两个动作发生.

理想情况下,我不想定义"错误"和"成功",只定义"statusCode"但我需要的是有一个"Else",这样我就不需要声明每个只存在2-3个的statusCode想要区别对待.

$.ajax({
        type: 'POST',
        contentType: "application/json",
        url: "../API/Employees.svc/" + EmployeeId + "/Company/" + CompanyId,
        data: jsonString,
        statusCode: {
            200: function () { //Employee_Company saved now updated

                hideLoading();
                ShowAlertMessage(SaveSuccessful, 2000);
                $('#ManageEmployee').dialog('close');

            },
            304: function () { //Nothing to save to Employee_Company

                hideLoading();
                $('#ManageEmployee').dialog('close');

                if (NothingToChange_Employee) {
                    ShowAlertMessage(NothingToUpdate, 2000);
                } else {
                    ShowAlertMessage(SaveSuccessful, 2000);
                }
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            AjaxError(XMLHttpRequest, textStatus, errorThrown);
        }
    });
Run Code Online (Sandbox Code Playgroud)

Nic*_*tti 28

由于"完整"事件总是被触发,您可以从那里简单地获取状态代码并忽略成功和错误函数

complete: function(e, xhr, settings){
    if(e.status === 200){

    }else if(e.status === 304){

    }else{

    }
}
Run Code Online (Sandbox Code Playgroud)

  • complete()现已弃用.使用完成,失败,总是替换方法. (12认同)

Mux*_*uxa 10

这是我使用的:

error: function (xhr, textStatus, errorThrown) {
    switch (xhr.status) {
        case 401:
           // handle unauthorized
           break;
        default:
           AjaxError(xhr, textStatus, errorThrown);
           break;
    }
}
Run Code Online (Sandbox Code Playgroud)


MrY*_*low 5

jQuery AJAX 响应completesuccesserror已被弃用。使用.done, .fail, .alwayspromise 代替更新的版本。

成功时.always签名为.done,失败时签名更改为.fail。使用textStatus可以获取正确的变量并返回正文内容。

var jqxhr = $.ajax( {
    type: frm.attr('method'),
    url: frm.attr('action'),
    data: frm.serialize(),
    dataType: 'json',
    } )

    .done(function( data, textStatus, jqXHR ) {
        alert( "success" );
    })
    .fail(function( jqXHR, textStatus, errorThrown ) {
        alert( "error" );
    })

    .always(function( data_jqXHR, textStatus, jqXHR_errorThrown ) {

        if (textStatus === 'success') {
            var jqXHR = jqXHR_errorThrown;
        } else {
            var jqXHR = data_jqXHR;
        }
        var data = jqXHR.responseJSON;

        switch (jqXHR.status) {
            case 200:
            case 201:
            case 401:
            default:
                console.log(data);
                break;
        }   

});

jqxhr.always(function() {
    alert( "second complete" );
});
Run Code Online (Sandbox Code Playgroud)