성공 및 오류 대신 새 jQuery AJAX 코드에 .done () 및 .fail ()을 사용해야합니까


167

나는 다음과 같이 코딩했다 :

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID },
    success: function (data) {
        $('#CityID').html(data);
    },
    error: function (ajaxContext) {
        alert(ajaxContext.responseText)
    }
});

그러나 마지막에 jQuery .ajax()문서 를 볼 때 아래와 같이 코딩해야한다고 제안하거나 적어도 a .done()및 a 추가를 제안 합니다 .fail().

var request = $.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
});

request.done(function (data) {
    xxx;
});
request.fail(function (jqXHR, textStatus) {
    xxx;
});

최신 정보

이 코드를 작성하면 동일하거나 3으로 나누면 어떤 이점이 있습니까?

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
}).done(function (data) {
    xxx;
}).fail(function (jqXHR, textStatus) {
    xxx;
});

답변:


165

사용 user2246674에서 언급 한 바와 같이 success하고error ajax 함수의 as 매개 변수를 사용하는 것이 유효합니다.

선행 답변과 일치하도록 문서를 읽으십시오.

지원 중단 공지 :

jqXHR.success (), jqXHR.error () 및 jqXHR.complete () 콜백은 jQuery 1.8에서 더 이상 사용되지 않습니다. 최종 제거를 위해 코드를 준비하려면 jqXHR.done (), jqXHR.fail () 및 jqXHR.always ()를 대신 사용하십시오.

당신은 콜백 조작 기능을 사용하는 경우, 사용 (메소드 체인 예를 들어 사용) .done(), .fail()그리고 .always()대신 success(), error()하고 complete().


54
동의하지 않습니다. [정보] 참고 문헌 회담 콜백 조작 함수 (예를 들어 .error, .success) 되어 더 보편적 인 이연 패턴의 찬성되지하지만 받는 매개 변수 ajax메소드는 추천하지 않습니다 및 유효하고 허용 모두 - 심지어 jQuery를 1.9 / 2.0에! 모든 현재 양식에서 ajax여전히 지연을 리턴합니다. 이미 연결된 지연 콜백이있을 수 있습니다.
user2246674

1
여기에는 jQuery 1.9가 있으며 success :, error : 및 complete :를 계속 사용할 수 있습니다. 그러나 내 질문은 .done () == is to success :?
TARKUS

3
@GregoryLewis JQuery 1.10 소스 코드 : jqXHR.success = jqXHR.done;.
Michael Laffargue

9
솔직히 선호하는 것 success, fail, always.
ahnbizcad

4
와우, 나는 문서도 잘못 읽었다. 문자 그대로 $ .ajax에 대한 '성공'/ '오류'옵션이 '완료 / 실패'로 다시 쓰여졌다 고 생각했습니다. 그것은 단지 콜백 메소드 체인이었습니다. 솔직히 말해서 옵션 이름도 바꿔야한다고 생각합니다. 그것은 몇 시간 동안 울렸다.
OzzyTheGiant

12

@Michael Laffargue의 게시물에 무언가를 추가하고 싶습니다.

jqXHR.done() 가 더 빠르다!

jqXHR.success()콜백에 약간의 로딩 시간이 있으며 때로는 스크립트를 과도하게 사용합니다. 나는 전에 어려운 길을 찾았습니다.

최신 정보:

사용 jqXHR.done(), jqXHR.fail()그리고 jqXHR.always()당신은 더 나은 아약스 요청을 조작 할 수 있습니다. 일반적으로 일부 변수 또는 객체에서 ajax를 정의하고 코드의 어느 부분에서나 해당 변수 또는 객체를 사용하여 데이터를 더 빠르게 얻을 수 있습니다. 좋은 예 :

/* Initialize some your AJAX function */
function call_ajax(attr){
    var settings=$.extend({
        call            : 'users',
        option          : 'list'
    }, attr );

    return $.ajax({
        type: "POST",
        url: "//exapmple.com//ajax.php",
        data: settings,
        cache : false
    });
}

/* .... Somewhere in your code ..... */

call_ajax({
    /* ... */
    id : 10,
    option : 'edit_user'
    change : {
          name : 'John Doe'
    }
    /* ... */
}).done(function(data){

    /* DO SOMETHING AWESOME */

});

9
신뢰할 수 있고 검증 가능한 참조 자료가 있습니까?
Paul Vargas

@PaulVargas 나는 성능 테스트를 한 적이 없지만 실제로는 이것이 효과가 있다고 생각합니다. 직접 시도해 볼 수 있습니다.
Ivijan Stefan Stipić '

1
신뢰할 수있는 증거를 제공하십시오.
wonsuc

아시다시피 콜백 함수는 함수에서 일부 객체를 반환하는 것에 비해 느립니다. 때로는 작은 영향을 주지만 전화가 많은 경우에는 때때로 막대 할 수도 있습니다.
Ivijan Stefan Stipić

7

간단한 말로

$.ajax("info.txt").done(function(data) {
  alert(data);
}).fail(function(data){
  alert("Try again champ!");
});

그것이 info.text를 얻는다면, 그것은 당신이 추가하는 어떤 기능이나 경고하거나 서버에서 info.text를 검색 할 수없는 방법이라면 경고 또는 오류 기능을합니다.


0

기존의 기존 응용 프로그램에서 JQuery를 1.x에서 2x 또는 3.x로 마이그레이션하려는 경우 JQuery 업그레이드가 더 이상 사용되지 않으므로 성공 대신 .done, .fail을 사용합니다. 오류가 발생합니다. 예를 들어 서버 웹 메소드를 호출하면 서버는 promise 객체를 호출 메소드 (Ajax 메소드)에 반환 하고이 promise 객체에는 .done, .fail..etc 메소드가 포함되므로 성공 및 실패 응답에 대해서도 동일합니다. 아래는 예입니다 (GET과 같은 요청 유형에 대해 생성 할 수있는 POST 요청과 동일합니다).

 $.ajax({
            type: "POST",
            url: url,
            data: '{"name" :"sheo"}',
            contentType: "application/json; charset=utf-8",
            async: false,
            cache: false
            }).done(function (Response) {
                  //do something when get response            })
           .fail(function (Response) {
                    //do something when any error occurs.
                });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.