source

document.ready()에서 jQuery Deferred를 받을 수 있습니까?

factcode 2023. 8. 22. 22:33
반응형

document.ready()에서 jQuery Deferred를 받을 수 있습니까?

스크립트가 로드된 직후에 번역을 받기 위해 Ajax에 요청합니다.페이지 하단에 스크립트를 로드하기 때문에 문서가 준비된 후에는 항상 이 메시지가 반환되지만, 문서 준비 상태에서 지연된 개체를 가져올 수 있는지는 여전히 궁금합니다.

이렇게 하면 다음과 같은 다른 작업을 수행하기 전에 문서가 준비되고 Ajax 호출이 성공적으로 반환되는지 확인할 수 있습니다.

$.when( $.ajax('translations'), document.ready())
.then(function(){
    // Start doing stuff here
});

데이터()사용하여 지연된 개체를 문서와 연결하고 다음에서 해결()할 수 있습니다.ready핸들러이렇게 하면 저장된 지연 개체를 $.when()과 함께 사용할 수 있습니다.

$(document).data("readyDeferred", $.Deferred()).ready(function() {
    $(document).data("readyDeferred").resolve();
});

$.when($.ajax("translations"), $(document).data("readyDeferred"))
 .then(function() {
    // Start doing stuff here.
});

다음은 ircmaxell의 코멘트를 정리한 버전입니다.

(function() {
  var doc_ready = $.Deferred();
  $(doc_ready.resolve);
  $.when(doc_ready, $.ajax('translations')).then(function() {
    console.log("done");
  });
})();

편집을

잘못된 편집을 중지하기 위한 몇 가지 설명:

jquery 개체에 함수 전달(예:$(some_func))와 같습니다.$(document).ready(some_func).

그러므로,$(doc_ready.resolve);라인은 다음과 같은 것의 단축형일 뿐입니다.

$(document).ready(function() {
  doc_ready.resolve()
});

사용해 보십시오.

$.when($.ajax('translations'), $.ready).then(function() {
    // Start doing stuff here
});

내 버전은:

$.when(
  $.Deferred(function() { $(this.resolve); }), 
  $.ajax('translations')).
  then(function() { console.log("done"); });

참조용 업데이트(2015):

이것은 현재 버전의 jQuery에서 사용할 수 있습니다.

$.when($.ready).then(...);

highlandjs를 사용하여 스트림으로 변환하는 것도 간단합니다.

_($.when($.ready)).map(transform).pipe(output) // etc.

jQuery'swhen그것은 적절한 약속이 아닙니다.다음과 같이 강제로 설정할 수 있습니다.

function documentReady() {
    return Promise.resolve($.when($.ready));
}

용도:

documentReady().then(function($) { ... });

로 해결됩니다.$그래서 그것도 좀 편리합니다.

대체 구현:

function documentReady() {
    return new Promise(r => $(r));
}

언급URL : https://stackoverflow.com/questions/6177187/can-i-get-a-jquery-deferred-on-document-ready

반응형