[jquery] $ .ajax의 성공과 .done () 메서드의 차이점은 무엇입니까

누구든지 나를 도울 수 있습니까? 과 의
차이점을 이해할 수 없습니다 .success.done()$.ajax

가능하다면 예를 들어주세요.



답변

간단히 말해, 성공 콜백 함수를 ajax 함수에서 분리하여 나중에 원래 코드 (관찰자 패턴)를 수정하지 않고도 고유 한 핸들러를 추가 할 수 있습니다.

여기에서 자세한 정보를 확인하십시오 : https://stackoverflow.com/a/14754681/1049184


답변

successAJAX 호출이 성공한 경우에만 발생합니다. 즉, 궁극적으로 HTTP 200 상태를 반환합니다. 성공 여부에 관계없이 error실패하고 complete요청이 완료되면 발생합니다 .

온 jQuery를 1.8에서 jqXHR객체 (에 의해 반환 $.ajax) success로 대체 done, errorfailcomplete함께 always.

그러나 이전 구문으로 AJAX 요청을 초기화 할 수 있어야합니다. 그래서 이것들은 비슷한 일을합니다 :

// set success action before making the request
$.ajax({
  url: '...',
  success: function(){
    alert('AJAX successful');
  }
});

// set success action just after starting the request
var jqxhr = $.ajax( "..." )
  .done(function() { alert("success"); });

이 변경은 jQuery 1.5의 지연된 객체 와의 호환성을위한 것 입니다. Deferred (현재 Promise, Chrome 및 FX에서 완전한 기본 브라우저 지원을 제공함)를 사용하면 비동기 작업을 연결할 수 있습니다.

$.ajax("parent").
    done(function(p) { return $.ajax("child/" + p.id); }).
    done(someOtherDeferredFunction).
    done(function(c) { alert("success: " + c.name); });

이 함수 체인은에서 얻는 중첩 된 콜백 피라미드보다 유지 관리가 더 쉽습니다 success.

그러나 done이제는 대신 Promise사용 하는 구문을 위해 더 이상 사용되지 않습니다 then.

$.ajax("parent").
    then(function(p) { return $.ajax("child/" + p.id); }).
    then(someOtherDeferredFunction).
    then(function(c) { alert("success: " + c.name); }).
    catch(function(err) { alert("error: " + err.message); });

이 가치 채택을 때문에 async그리고 await약속을 향상 구문 (및 오류 처리) 확장 :

try {
    var p = await $.ajax("parent");
    var x = await $.ajax("child/" + p.id);
    var c = await someOtherDeferredFunction(x);
    alert("success: " + c.name);
}
catch(err) {
    alert("error: " + err.message);
}


답변

.success() 웹 서버가 200 OK HTTP 헤더로 응답하는 경우에만 호출됩니다-기본적으로 모든 것이 정상일 때.

done ()에 첨부 된 콜백은 지연이 해결 될 때 시작됩니다. fail ()에 연결된 콜백은 지연이 거부 될 때 시작됩니다.

promise.done(doneCallback).fail(failCallback)

.done() has only one callback and it is the success callback


답변

success요청이 성공할 때 호출되고 $.ajax호출의 일부인 콜백입니다 . done실제로에서 jqXHR반환 된 객체의 일부이며 jQuery 1.8에서 $.ajax()대체 success됩니다.


답변