2012-10-31 3 views
61

어느 것을 사용해야합니까?jquery ajax - .fail과 call : 오류

하나가 아닌 다른 것을 사용해야하는 이유가 있습니까?

하나가 오류 처리에 더 좋습니까?

$.ajax({ 
    url: url, 
    data: { start: start, end: end } 
}).done(function(data, textStatus, jqXHR) { 
    $('#myElement').append(data); 
}).fail(function() { 
    // report error  
}); 

또는

$.ajax({ 
    url: url, 
    data: { start: start, end: end }, 
    success: function(data, textStatus, jqXHR) { 
     $('#myElement').append(data); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     // report error 
    } 
}); 

답변

36

은 두 가지 옵션은 동일합니다.

그러나 약속 스타일 인터페이스 (.fail().done())를 사용하면 응답을 처리하는 코드에서 요청을 생성하는 코드를 분리 할 수 ​​있습니다.

AJAX 요청을 보내고 jqXHR 개체를 반환 한 다음 해당 함수를 다른 곳에서 호출하고 처리기를 추가하는 함수를 작성할 수 있습니다.

.pipe() 기능과 함께 사용하면 여러 AJAX 할 때 중첩을 줄일 수 있습니다 약속 스타일의 인터페이스는 호출

$.ajax(...) 
    .pipe(function() { 
     return $.ajax(...); 
    }) 
    .pipe(function() { 
     return $.ajax(...); 
    }) 
    .pipe(function() { 
     return $.ajax(...); 
    }); 
+24

"jQuery 1.8부터 deferred.pipe() 메서드는 더 이상 사용되지 않으므로 대신 deferred.then() 메서드를 사용해야합니다." http://api.jquery.com/deferred.pipe/ – richardaday

25

그냥이를 씻으 ...

성공 및 오류 접근 방식은 jQuery 1.8에서 더 이상 사용되지 않습니다.

jQuery Ajax

중단주의 사항 : jqXHR.success(), jqXHR.error() 및 jqXHR.complete() 콜백은 jQuery를 1.8로 사용되지 않습니다. 최종 제거를위한 코드를 준비하려면 대신 jqXHR.done(), jqXHR.fail() 및 jqXHR.always()를 사용하십시오.

+6

이것은 실제로'$ .ajax'가 아닌'jqXHR' 객체에 대한'error()'의 비추천입니다. 이것은 사용자가 참조하고있는 것입니다. –

+1

@AdamGrant,'$ .ajax' _returns_ a'jqXHR', 그래서 @slohr이 맞습니다. –

+5

네 말이 맞아. 나는 내 코멘트를 다시 써야한다.'success'와'error'에 대한 비추천은'$ .ajax()'에 전달 된 객체 레벨 함수에는 적용되지 않는다. –