2011-02-22 11 views
17

이에 대한 답변이 서로 충돌하여 여러 게시물 (append supposedly immediate)을 보았습니다. 우리는 비동기 것으로 보인다 (http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js) JQuery와 1.4을 사용하여) (추가하고, 같은 것을 :Jquery append() 비동기 적으로 동작합니까?

편집은 AJAX 콜백의 컨텍스트

... 
var message = $.ajax({ 
    type: "GET", 
    url: "/getVolumes/" + _Id, 
    async: false 
}).responseText; 
if (parseInt(message) != 0){ 
    var $results = $(message); 
    $MAIN_DIV.append($results); 
    retrieveTargets(); 
} 
...  
function retrieveTargets(){ 
    var $targets = $(".resultTargets"); 
} 

실행 코드를 표시하고 생성하기 페이지는 예상대로 표시되지만 대상 쿼리는 런타임에 아무 것도 산출하지 않습니다. JS 콘솔에서 동일한 코드를 실행하면 예상대로 요소가 검색됩니다.

이것이 JQuery에서 예상되는 동작이라면 추가가 완료 될 때까지 기다리는 적절한 방법은 무엇입니까?

+2

jQuery 1.8 ?? 어떻게 오는가 ?? 너 미래 야? :) – DrStrangeLove

+2

Append가 동기식이지만 Ajax 호출이 올바르지 않습니다. 이 코드는 어디에 위치해 있습니까? 아약스 호출의 콜백 함수에서? – Capsule

+0

올바른 버전으로 수정. 1.8에서 원하는대로 작동 할 것입니다. – RSG

답변

24

모든 의견이이를 추적하는 데 도움이되었습니다. 나는 콘솔에서 붉은 청어를 따르고 있었다. 문제는 동시성하지이었고, 그 다음 라인을했다 :

$targets.each(function(){ 
    ... 
    this.html(); 
    ... 

짧은에서

$(this).html(); 

될 필요가, 모두는 정확했다. Jquery append()가 동 기적으로 작동합니다.

8

append 이후에 문제가 해결되면 시도해보십시오.

$('#dynamic-container').append(<your-content>) ; 
setTimeout(function() { 
    ...code which addresses elements inside #dynamic-container... 
},0) ; 

상세 정보 :

  • 은 분명히 append 특히 구글 크롬에서, 분명히 DOM 동 기적으로 업데이트하지 않습니다
  • 동기, 나는 div의 높이를 검색하려는이 문제를 직면 after append
  • 내 가정은 비동기 적으로 업데이트 된 브라우저 업데이트 스레드가 있었고, 아래에 대한 의견이 더 많았는데 여전히 상황에 대해 명확하지 않았습니다. 오크,하지만 솔루션은 모든 경우에 나를 위해 작동합니다.
+1

)의 직전에'console.log ($ MAIN_DIV.length)'를 배치하면 어떻게됩니까? 브라우저가 시각적으로 렌더링을하지 않더라도 브라우저의 레이아웃을 업데이트합니다 JavaScript가 데이터 또는 DOM에서 측정을 요청할 때 사용자에게 전달됩니다. (이것이 레이아웃 스 래싱의 원인입니다 (http://wilsonpage.co.uk/preventing-layout-thrashing/) –

+0

) 렌더링 스레드 일부는 브라우저에서 UI 업데이트를 처리하는 방법에 대한 내 가정입니다. 코드에서이 문제가 발생하여 위의 솔루션을 사용하여 해결했습니다. 함수가 같은 스레드에서 완료된 후에도 레이아웃 코드가 실행될 수도 있습니다. 브라우저가 작동하는 방법에 대한 전문가 – Bitonator

+1

나는 이것을 싫어하지만 당신이 착각했다고 생각합니다.난 당신이 문제를 격리, 위의 문제의 간단한 재생산 (일부 jsfiddle)을 생산할 수있을 것이라고 의심; '.append'는 실제로 완전히 동기식입니다. 또한 자바 스크립트는 단일 스레드이며, 브라우저를 포함한 모든 것들은 동시에 데이터를 변경하고 있다는 점에 유의하십시오. –

관련 문제