programing

Jquery $.ajax 상태코드 기타

css3 2023. 8. 18. 22:50

Jquery $.ajax 상태코드 기타

jquery Ajax call에서 저는 현재 200과 304의 statusCode를 처리하고 있습니다.하지만 "오류"를 정의하여 다시 발생할 수 있는 오류를 파악할 수도 있습니다.

유효성 확인 메시지가 있는 경우 상태 코드 400 - 잘못된 요청을 반환합니다.

그러면 이것은 내가 정의한 statusCode "400" 함수에 들어가기 전에 "Error" 함수에 들어갑니다.그 말은 두 가지 행동이 일어난다는 것을 의미합니다.

이상적으로는 "Error"와 "Success"를 정의하지 않고 "statusCode"만 정의하고 싶지만, 제가 필요로 하는 것은 "Else"를 가지고 있어서 제가 다르게 처리하고 싶은 2-3개의 상태 코드만 선언할 필요가 없습니다.

$.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);
        }
    });

"완료" 이벤트는 항상 실행되므로, 여기서 상태 코드를 가져와 성공 및 오류 기능을 무시할 수 있습니다.

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

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

    }else{

    }
}

이것이 제가 사용하는 것입니다.

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

jQuery AJAX 응답complete,success,error더 이상 사용되지 않습니다.더 최신 버전의 최신 버전.done,.fail,.always대신 약속합니다.

성공시.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" );
});

당신의 초기 논리와 유사한 접근 방식을 유지하기 위해 statusCode 객체를 계속 전달하겠습니다.그러나 "else"가 4xx 또는 5xx 유형 오류 코드의 영역에 속한다는 것은 여전히 알고 있습니다.

그래서 나는 당신의 원래 코드를 다음으로 업데이트할 것입니다.

var statusCodeResponses = {
    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);
        }
    }
};

var genericElseFunction = function(response){
    // do whatever other action you wanted to take
};

for(var badResponseCode=400; badResponseCode<=599; badResponseCode++){
     statusCodeResponses[badResponseCode] = genericElseFunction;
}

$.ajax({
    type: 'POST',
    contentType: "application/json",
    url: "../API/Employees.svc/" + EmployeeId + "/Company/" + CompanyId,
    data: jsonString,
    statusCode: statusCodeResponses,
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        AjaxError(XMLHttpRequest, textStatus, errorThrown);
    }
});

언급URL : https://stackoverflow.com/questions/10042040/jquery-ajax-statuscode-else