시나리오에서 ajax 요청을 중단 한 다음 사용자 응답 후 해당 요청을 다시 보내는 레거시 코드가 있습니다.
function resendLastAjaxRequest(ajaxRequest, ajaxSettings){
if(ajaxSettings != undefined){
$.ajax(ajaxSettings).done(function ( data ) {
ajaxSettings.success(data);
});
}
이제 위의 코드는 요청에 대한 성공 핸들러를 두 번 실행하지만 1 년 이상 거기에 있었으며 아무도이를 만났습니다. jquery 버전 업데이트 때문입니까? 우리는 현재 2.0.3을 사용하고 있습니다. 정확히 언제 jquery가 업데이트되었는지 모르겠지만 이전 버전 done
에서 success
. 파헤 쳤지 만 그토록 오랫동안 효과가 있었던 이유를 찾지 못했습니다. 도와주세요.
최신 정보
$ .ajax의 성공과 .done () 메서드의 차이점은 무엇입니까
댓글이 포함되어 있습니다.
좋아요, 그것은 jQuery 1.8입니다 :) $ .ajax가 jQuery 1.5에서 약속을 반환하기 때문에 이것은 일관성 문제에 대한 간단한 대체입니다 (deferred 인터페이스 사용) : done () 대신 success (), fail () for error complete ()의 경우 () 및 always ()
즉, done
이 호출되면 success
명시 적으로 트리거 해야합니다. 이것이 그렇게 오랫동안 효과가 있었던 이유 일 수 있습니다. 그러나 이제 done이 실행되기 전에 success
핸들러가 이미 호출되고 done
콜백이 success
핸들러를 다시 호출 합니다.
success
한 번만 호출 되는 코드를 변경 / 수정하는 방법에 대한 제안 이 있습니까?
편집하다
ajaxSettings는 다음과 같습니다.
accepts: Object
async: true
cache: false
complete: function (request, status)
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
contents: Object
converters: Object
crossDomain: false
dataTypes: Array[1]
error: function (request, status){flatOptions: Object global: true hasContent: false isLocal: false jsonp: "callback"
jsonpCallback: function (){var e=hn.pop()||x.expando+"_"+Yt++;return this[e]=!0,e}loadingdisplay: trueprocessData: true
responseFields: Object
success: function (htmlData) {type: "GET"
주석에서 말했듯이 이전에 jQuery 버전 이 1.5 미만 ( .done()
구현 되지 않음 ) 이었으므로 성공 메서드가 콜백으로 호출 된 다음 .done()
아무것도 중단하지 않고 콘솔에 오류가 발생합니다 (예 :) undefined is not a function
. 따라서이 경우 콘솔에 오류가 발생하고 하나의 콜백 함수 만 호출됩니다.
jQuery 1.4.4 데모 : jsfiddle
콘솔에서 :
오류 1 개 :
undefined is not a function
(때문에.done()
)
과
1 로그 :
Object
(호출 데이터)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다