2010-04-21 2 views
0

동적 스크립트 태그와 JSON을 사용하여 원격 데이터를로드하고 있습니다. 내 웹 사이트에 표시하고있는 원격 페이지에는 콘텐츠를로드하는 데 사용하는 div가 있습니다.javascript setTimeout을 사용하여 div가로드되었는지 확인

문제는 페이지가로드 될 때 javascript 함수가 원격 데이터이므로 div가 표시되지 않는다는 것입니다. 약 300의 타임 아웃을 설정하면 일반적으로 작동하고 javascipt는 div를 볼 수 있습니다. 그러나 때로는 시간이 오래 걸리며 자바 스크립트가 손상됩니다.

function load_content() 
{ 
    if(document.getElementById('remote_div')==null) 
    { 
    setTimeout('load_content()', 300); 
    } 
    else 
    { 
    document.getElementById('remote_div').innerHTML = 'Content goes here' 
    } 
} 

하지만 그냥 작동하지 않는 것 ... 그것은 잘못된 것입니다 :

나는이 트링거야?

+0

을 시도 왜 scriptElement.onload를 사용할 수 있습니까? – Warty

+3

"remote_div"는 어디에 있습니까? 그것이 iframe에 있다면, 당신은 잘못된'document' 객체를 질의하고 있습니다. (또한, null을 명시 적으로 검사 할 필요가 없습니다.'if (document.getElementById ('remote_div')) {...'충분합니다.) – Anonymous

답변

3

setInterval을 사용하여이 작업을 수행 할 수 있습니다. 예 :

var intrval = setInterval(function(){ 
    if(document.getElementById('remote_div')) { 
     load_content(); 
     clearInterval(intrval); 
}, 50); 

function load_content() { 
    //loading content here 
} 

이렇게하면로드 시간을 예측할 필요가 없습니다. div # remote_div가 DOM 트리에서 발견 될 때 load_content가 실행됩니다.

의견을 기준으로 편집하여 간격을 지정하는 것을 잊어 버렸기 때문에 실제로는 명확하지 않습니다.

+0

기본적으로'setTimeout'을 사용하는 것과 같습니다. 'setInterval'의 반환 값을'clearInterval'에서 사용할 수 있도록 유지해야합니다. 그렇지 않으면 멈추지 않고 계속 페이지를 20 번 업데이트합니다. – Guffa

+0

@Guffa : 그가 'clearInterval'을 어떻게 불렀는지 주목하십시오 : 간격은 번호가 매겨져 있고, 이것이 (번호) 번째라면, 그 번호를 그냥 통과시킬 수 있습니다. 물론, 이것은 여러분이 사용하고있는 모든 간격 (예를 들어, 스크립트 라이브러리를 가져 오지 않은)을 유지하고 추적 할 수 있다고 가정합니다. – Anonymous

+1

@Guffa : 나는 그것이 같지 않다고 생각합니다. setTimeout의 timeout 값 뒤에 div가 없으면 그 것이 끝입니다. intervalled 호출을 사용하여, div가 존재하고 사용 가능합니다. 나는 대답을 편집 했으므로 이제 간격이 적당히 정리된다. – KooiInc

0

iframe을 사용하고 있습니까?

그렇다면,

document.getElementById('YOUR_IFRAME_ID').contentWindow.document.getElementById('remote_div') 
+0

난 사용하고 있지 않다. iframe ... 나는 역순으로 스크립트 태그를 콜백과 함께 사용하고 있습니다. 내 콘텐츠가 표시되는 웹 사이트를 제어 할 권한이 없으므로 원격 데이터 및 아약스의 브라우저 보안을 둘러 볼 방법이 필요합니다. 또한 동적 높이 조정이 필요합니다. 모든 것이 잘 작동하지만 jquery 슬라이더를로드하려고 시도하면 절반 만 나타납니다. 그것이 나타나지 않을 때 나는이 에러를 얻는다. Uncaught TypeError : Object # 에는 '슬라이더'라는 메서드가 없다. jquery, ui 및 slider css를로드해야한다. 전에로드되어 있는지 확인해야한다. DOM 처리하기 – Matt

관련 문제