Programing

jQuery.ajax 처리가 다음과 같은 응답을 계속합니다 :“성공 :”vs“.done”?

lottogame 2020. 3. 14. 10:04
반응형

jQuery.ajax 처리가 다음과 같은 응답을 계속합니다 :“성공 :”vs“.done”?


지금은 몇 주 동안 jQuery를하고 AJAX와 협력하고 나는 호출이 된 후 스크립트를 '계속'을 두 가지 방법을 보았다 : success:.done.

jQuery 문서 의 개요에서 우리는 다음을 얻습니다.

.done () : 설명 : Deferred 객체가 해결 될 때 호출 될 핸들러를 추가합니다.

성공 : (.ajax () 옵션) : 요청이 성공하면 호출 할 함수입니다.

따라서 둘 다 AJAX 호출이 완료 / 해결 된 후에 무언가를합니다. 하나 또는 다른 것을 무작위로 사용할 수 있습니까? 차이점은 무엇이며 언제 하나 대신 사용됩니까?


successjQuery에서 성공 콜백의 전통적인 이름으로, ajax 호출의 옵션으로 정의되었습니다. 그러나 $.Deferreds보다 복잡한 콜백의 done구현은 성공 콜백을 구현하는 데 선호되는 방법이므로 any에서 호출 할 수 있습니다 deferred.

예를 들어, 성공 :

$.ajax({
  url: '/',
  success: function(data) {}
});

예를 들면 다음과 같습니다.

$.ajax({url: '/'}).done(function(data) {});

좋은 점은 done의 반환 값 $.ajax이 이제 응용 프로그램의 다른 곳에 바인딩 될 수있는 지연된 약속이라는 것입니다. 몇 가지 다른 장소에서이 아약스 호출을하고 싶다고 가정 해 봅시다. 오히려이 아약스 호출을 함수에 옵션으로 성공 함수에 전달하는 대신, 당신은 단지 함수 반환 할 수 있습니다 $.ajax자체와 결합하여 콜백 done, fail, then, 또는 무엇이든을. 참고 always요청이 성공 또는 실패 여부를 실행하는 콜백입니다. done성공시에만 트리거됩니다.

예를 들면 다음과 같습니다.

function xhr_get(url) {

  return $.ajax({
    url: url,
    type: 'get',
    dataType: 'json',
    beforeSend: showLoadingImgFn
  })
  .always(function() {
    // remove loading image maybe
  })
  .fail(function() {
    // handle request failures
  });

}

xhr_get('/index').done(function(data) {
  // do stuff with index data
});

xhr_get('/id').done(function(data) {
  // do stuff with id data
});

유지 관리 측면에서이 기능의 중요한 이점은 애플리케이션 별 기능으로 아약스 메커니즘을 래핑했다는 것입니다. $.ajax미래에 다르게 작동 하기 위해 전화가 필요하다고 결정 하거나 다른 ajax 메소드를 사용하거나 jQuery에서 멀어지면 xhr_get정의 를 변경하기 만하면됩니다 (약속 또는 최소한 done메소드 를 반환해야합니다 . 위 예의 경우). 앱 전체의 다른 모든 참조는 동일하게 유지 될 수 있습니다.

당신이 할 수있는 더 많은 (훨씬 멋진) 일이 있습니다 $.Deferred. 그중 하나 pipe$.ajax요청 자체가 성공 하더라도 서버 가보고 한 오류에서 실패를 트리거하는 데 사용 됩니다 . 예를 들면 다음과 같습니다.

function xhr_get(url) {

  return $.ajax({
    url: url,
    type: 'get',
    dataType: 'json'
  })
  .pipe(function(data) {
    return data.responseCode != 200 ?
      $.Deferred().reject( data ) :
      data;
  })
  .fail(function(data) {
    if ( data.responseCode )
      console.log( data.responseCode );
  });
}

xhr_get('/index').done(function(data) {
  // will not run if json returned from ajax has responseCode other than 200
});

http://api.jquery.com/category/deferred-object/ 에 대해 자세히 알아 $.Deferred보십시오.

참고 : jQuery 1.8부터는 정확히 동일한 방식 pipe으로 사용하기 위해 더 이상 사용되지 않습니다 then.


async: false아약스에 필요한 경우 success대신을 사용해야 합니다 .done. 그렇지 않으면 사용하는 것이 좋습니다 .done. 이것은 jQuery 공식 사이트에서 온 것입니다 .

jQuery를 1.8으로 의 사용 비동기 : 거짓 jqXHR ($ .Deferred)와 함께 사용되지 않습니다; 당신은 해야한다 사용 성공 / 오류 / 전체 콜백 옵션을 대신 같은 jqXHR 객체의 대응 방법 () jqXHR.done .

참고 URL : https://stackoverflow.com/questions/8840257/jquery-ajax-handling-continue-responses-success-vs-done

반응형