programing

jQuery AJAX 호출의 'finally'와 유사한 호출이 있습니까?

testmans 2023. 4. 5. 21:24
반응형

jQuery AJAX 호출의 'finally'와 유사한 호출이 있습니까?

jQuery AJAX 호출에 Java의 'finally' 아날로그가 있습니까?여기 코드가 있어요항상 예외를 두지만 항상 then() 메서드로 보내고 싶습니다.

    call.xmlHttpReq = $.ajax({
        url : url,
        dataType : 'json',
        type : 'GET'
    }).always(function(processedDataOrXHRWrapper, textStatus, xhrWrapperOrErrorThrown) {

       throw "something";

    }).then(function() {

        alert("i want to always run no matter what");
    });

done(), complete()다른 한쪽을 항상 사용하려고 했지만 아무 것도 작동하지 않습니다.

JSFiddle은 다음과 같습니다.

http://jsfiddle.net/qv3t3L0m/

다음의 예를 참조해 주세요.

$.ajax({
        type: "GET",
        dataType: dataType,
        contentType: contentType,
        async: TRUE,
        url: $('html form:nth-child(1)').attr('action') + "?" $('html form:nth-child(1)').serialize(),
        success: function(data) {
            console.log("FUNFOU!");
        },
        error: function(data) {
            console.log("NÃO FUNFOU!");
        },
        complete: function(data) {
            console.log("SEMPRE FUNFA!"); 
            //A function to be called when the request finishes 
            // (after success and error callbacks are executed). 
        }
    });

상세한 것에 대하여는, http://api.jquery.com/jquery.ajax/ 를 참조해 주세요.

.always()작동해야 합니다.http://api.jquery.com/jQuery.ajax/ 의 「JQXHR 오브젝트」섹션을 참조해 주세요.

jqXHR.always(function(data|jqXHR, textStatus, jqXHR|오류)느려짐) { } ; 완전한 콜백옵션의 대체 구성 요소로서 폐지된 .complete() 메서드가 .always() 메서드로 대체됩니다.

성공한 요구에 대한 응답으로 함수의 인수는 .done()의 인수와 동일합니다.데이터, textStatus 및 jqXHR 객체입니다.실패한 요청의 인수는 .fail() 인수와 동일합니다.jqXHR 오브젝트, textStatus 및 error던졌습니다. 지연을 합니다.구현에 대한 자세한 내용은 항상()을 참조하십시오.

http://api.jquery.com/deferred.always/ 도 참조해 주세요.

jQuery의 약속 구현은 전달된 메서드에서 발생한 오류를 처리하지 않기 때문에 다음 제안은 jQuery에서 작동하지 않습니다.jQuery가 약속/A+에 준거한 경우 어떤 일이 일어날 수 있는지 예시로 여기에 남겨두겠습니다.Bergi가 올바르게 지적했듯이, 당신은 당신의 코드를 당신의 try catch block으로 수동으로 포장해야 합니다.

call.xmlHttpReq = $.ajax({
    url : url,
    dataType : 'json',
    type : 'GET'
}).then(function(processedDataOrXHRWrapper, textStatus, xhrWrapperOrErrorThrown) {

   throw "something";

}).always(function() {

    alert("i want to always run no matter what");
});

jquery의 약속이 항상 지원되는지는 모르겠지만, 다른 방법은 success Handler와 error Handler 둘 다와 같은 함수를 사용하는 것입니다.

call.xmlHttpReq = $.ajax({
    url : url,
    dataType : 'json',
    type : 'GET'
}).then(function(processedDataOrXHRWrapper, textStatus, xhrWrapperOrErrorThrown) {

   throw "something";

}).then(function() {

    alert("i want to always run no matter what");
},
function() {

    alert("i want to always run no matter what");
});

jQuery 3.0 이후를 사용하는 사용자를 위한 참고 사항

폐지 통지:jqXHR.success(), jqXHR.error() 및 jqXHR.complete() 콜백은 jQuery 3.0에서 삭제됩니다.대신 jqXHR.done(), jqXHR.fail() 및 jqXHR.always()를 사용할 수 있습니다.

공식 문서와 같이

서버에 의존한 버그 에이잭스가 있습니다.상태를 체크할 때 "complete"가 최선입니다.일종의 "Success"와 "error" 등이 PUT, POST 및 GET의 100%가 아닙니다.예를 들어보겠습니다.

$.ajax({
    url: '/api/v2/tickets/123456.json',
    ....
    ....
    ....
    complete: function(data) { 
        if (data.statusText == "success") { 
            console.log("Sent successfully");
        } else { 
            console.log("Not Sent");
        }
    }
});

영어가 서툴러!응원;-)

모든 ajax 요청에 대해 하나의 코드 정의를 원하는 경우 다음과 같이 할 수 있습니다.

$(document).ajaxComplete(function () {
    console.log('ajax complete on doc');
})

언급URL : https://stackoverflow.com/questions/15925522/is-there-any-analog-to-a-finally-in-jquery-ajax-calls

반응형