jQuery.ajax 처리가 다음과 같은 응답을 계속합니다 :“성공 :”vs“.done”?
지금은 몇 주 동안 jQuery를하고 AJAX와 협력하고 나는 호출이 된 후 스크립트를 '계속'을 두 가지 방법을 보았다 : success:
와 .done
.
jQuery 문서 의 개요에서 우리는 다음을 얻습니다.
.done () : 설명 : Deferred 객체가 해결 될 때 호출 될 핸들러를 추가합니다.
성공 : (.ajax () 옵션) : 요청이 성공하면 호출 할 함수입니다.
따라서 둘 다 AJAX 호출이 완료 / 해결 된 후에 무언가를합니다. 하나 또는 다른 것을 무작위로 사용할 수 있습니까? 차이점은 무엇이며 언제 하나 대신 사용됩니까?
success
jQuery에서 성공 콜백의 전통적인 이름으로, 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
'Programing' 카테고리의 다른 글
디렉토리가 존재하는지 어떻게 확인합니까? (0) | 2020.03.14 |
---|---|
node.js에서“Error : spawn ENOENT”를 어떻게 디버깅합니까? (0) | 2020.03.14 |
jQuery-$ (document) .ready와 $ (window) .load의 차이점은 무엇입니까? (0) | 2020.03.14 |
cout을 사용하여 배정 밀도로 double 값을 인쇄하는 방법은 무엇입니까? (0) | 2020.03.14 |
build.plugins.plugin.version에 대한 Maven 3 경고 (0) | 2020.03.14 |