[JQUERY] jQuery.ajax 처리는 응답을 계속 : "성공" "되는 .done"대?
JQUERYjQuery.ajax 처리는 응답을 계속 : "성공" "되는 .done"대?
해결법
-
1.성공은 Ajax 호출에 옵션으로 정의 jQuery를에 성공 콜백의 전통적인 이름이었다. 그것은 어떤 연기에 호출 할 수 있습니다 그러나, 이후 수행 $ .Deferreds 더 정교한 콜백의 구현은, 성공 콜백을 구현하는 좋은 방법입니다.
성공은 Ajax 호출에 옵션으로 정의 jQuery를에 성공 콜백의 전통적인 이름이었다. 그것은 어떤 연기에 호출 할 수 있습니다 그러나, 이후 수행 $ .Deferreds 더 정교한 콜백의 구현은, 성공 콜백을 구현하는 좋은 방법입니다.
예를 들어, 성공 :
$.ajax({ url: '/', success: function(data) {} });
예를 들어, 수행 :
$.ajax({url: '/'}).done(function(data) {});
완료의 좋은 점은 $ 아약스의 반환 값은 응용 프로그램에서 다른 곳으로 결합 할 수있는 연기 약속은 지금이다. 그럼 당신은 몇 가지 다른 장소에서이 아약스 전화를하고 싶은 말은하자. 오히려이 아약스 호출을 함수에 옵션으로 성공 함수에 전달하는 대신, 당신은 단지 함수 반환 $ 자체 아약스하고, 실패, 수행, 또는 무엇과 결합하여 콜백 할 수 있습니다. 참고 항상 요청이 성공 또는 실패 여부를 실행하는 콜백입니다. 완료는 성공에 트리거됩니다.
예를 들면 :
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 });
유지 보수의 관점에서 이것의 중요한 장점은 응용 프로그램 별 기능에 아약스 메커니즘을 포장 한 것입니다. 당신이 미래에 다르게 작동하기 위해 $ 아약스 호출이 필요하거나 다른 아약스 방법을 사용하거나 jQuery를 멀리 이동하려는 경우, 당신은 적어도 약속 또는 반환 확인되는합니다 (xhr_get 정의를 변경해야 끝난있어서, 상기 실시 예)의 경우이다. 응용 프로그램 전반에 걸쳐 다른 모든 참조는 동일하게 유지 될 수 있습니다.
오류가 서버에 의해보고에 $ 아약스 요청 자체가 성공해도, 실패를 유발하는 당신이 사용하는 파이프 중 하나는 $ .Deferred, 함께 할 수있는 더 많은 (많은 쿨러) 가지가 있습니다. 예를 들면 :
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 });
자세한 내용은 여기 $ .Deferred에 대한 읽기 : http://api.jquery.com/category/deferred-object/
참고 : jQuery를 1.8으로는, 파이프는 정확히 같은 방법으로 다음 사용을 위하여 사용이 중지되었습니다.
-
2.당신이 비동기해야하는 경우가 아약스에 허위, 대신되는 .done의 성공을 사용해야합니다. 그 밖에 당신은 더 나은되는 .done를 사용합니다. 이 jQuery를 공식 사이트에서입니다 :
당신이 비동기해야하는 경우가 아약스에 허위, 대신되는 .done의 성공을 사용해야합니다. 그 밖에 당신은 더 나은되는 .done를 사용합니다. 이 jQuery를 공식 사이트에서입니다 :
-
3.jqXHR 그들에게 약속의 모든 속성, 메서드 및 동작을 (자세한 내용은 이연 객체 참조) 제공, jQuery를 1.5 약속 인터페이스를 구현하는 기준으로 $ 아약스 ()에 의해 반환되는 객체. 이러한 방법은 경우는 $ 아약스 () 요청 종료라고 하나 개 이상의 함수 인수를. 이 요청을 완료 할 수 후 하나의 요청에, 심지어 할당 콜백에 여러 콜백을 할당 할 수 있습니다. (. 요청이 이미 완료되면, 콜백 즉시 해고)를 jqXHR 객체의 사용 가능한 약속 방법은 다음과 같습니다 :
jqXHR 그들에게 약속의 모든 속성, 메서드 및 동작을 (자세한 내용은 이연 객체 참조) 제공, jQuery를 1.5 약속 인터페이스를 구현하는 기준으로 $ 아약스 ()에 의해 반환되는 객체. 이러한 방법은 경우는 $ 아약스 () 요청 종료라고 하나 개 이상의 함수 인수를. 이 요청을 완료 할 수 후 하나의 요청에, 심지어 할당 콜백에 여러 콜백을 할당 할 수 있습니다. (. 요청이 이미 완료되면, 콜백 즉시 해고)를 jqXHR 객체의 사용 가능한 약속 방법은 다음과 같습니다 :
jqXHR.done(function( data, textStatus, jqXHR ) {});
성공 콜백 옵션에 대한 대안 구조는 구현 세부 사항에 대한 deferred.done ()를 참조하십시오.
jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});
오류 콜백 옵션에 대한 대안 구조는 .fail () 메소드는 사용되지 않는에는 .error () 메소드를 대체합니다. 구현 자세한 내용은 () deferred.fail을 참조하십시오.
jqXHR.always(function( data|jqXHR, textStatus, jqXHR|errorThrown ) { });
(1.6 jQuery를 첨가) 전체 콜백 옵션에 대한 대안 구조는 .always () 메소드는 사용되지 않는 .complete () 메소드를 대체합니다.
데이터, textStatus, 그리고 jqXHR 개체 : 성공적인 요청에 대한 응답으로, 함수의 인수가되는 .done들 ()과 동일합니다. 실패한 요청에 대한 인수가 .fail의 것과 동일합니다 () 다음 jqXHR 객체, textStatus 및 errorThrown. 구현 세부 사항에 대한 deferred.always ()를 참조하십시오.
jqXHR.then(function( data, textStatus, jqXHR ) {}, function( jqXHR, textStatus, errorThrown ) {});
(jQuery를 1.8로)가되는 .done ()와 .fail () 메소드, 허용하는 기능을 통합 기본 약속을 조작 할 수 있습니다. 구현 자세한 내용은 () deferred.then을 참조하십시오.
from https://stackoverflow.com/questions/8840257/jquery-ajax-handling-continue-responses-success-vs-done by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 당신은 어디에서 jQuery 라이브러리를 포함합니까? 구글 JSAPI? CDN? (0) | 2020.10.02 |
---|---|
[JQUERY] 어떻게 '크기 조정'이벤트의 '끝'을 기다리는 만 다음 작업을 수행? (0) | 2020.10.02 |
[JQUERY] 아이폰 OS 6 Safari는 아약스 결과 $를 캐싱되어 있습니까? (0) | 2020.10.02 |
[JQUERY] 필수 필드 검증 JQuery와 팝업 MVC 4에서 작동하지 (0) | 2020.10.02 |
[JQUERY] 내가 jQuery를 사용하여 드롭 다운리스트를 열 수 (0) | 2020.10.02 |