2013-01-18 2 views
0

는 내가 로컬 (/myjs/file.js)를 개최하여 고정 된 문제를 기록했다. 그러나 그것은 마치 해킹과 같은 느낌입니다. 먼저로드 한 다음로드하는 방법은 무엇입니까? jquery.ready는 해결책이 아닙니다. html을 사용하기 전에 dom이 준비 되었기 때문에 해결책이 아닙니다. 어떻게 제대로 대기합니까?자바 스크립트 아약스 경쟁 조건

+2

해서는 안'site.com/file.js''은 http : // site.com/file.js'를? – Charles

+2

그대로 받아들이지 마십시오. – BruteCode

+0

@BruteCode : 우리는 프로그래머 및 소프트웨어 엔지니어입니다. 우리는 세부 사항에 대한 모든 것 :-) –

답변

4

jQuery.ready이라고 말하면 jQuery를 사용하고있는 것 같습니다. 그렇다면 <script> 태그를 div의 내용에 넣는 대신 jQuery.getScript을 사용하십시오. 그러면 스크립트가로드 될 때 콜백이 생깁니다.

어떤 이유로 든 할 수 없다면 투표 할 수 있습니다. file.js에서 뭔가를 사용하고자하는 코드에서 : 스크립트가로드되면 onload 속성이 함수를 지정

<script type="text/javascript" src="site.com/file.js" onload="myFunc()"></script> 
<script type="text/javascript"> 
function myFunc() { 
    //use file.js object here 
} 
</script> 

가 실행되는 :

function doSomethingWithFileJS() { 
    if (typeof anObjectProvidedByFileJS === "undefined") { 
     setTimeout(doSomethingWithFileJS, 50); 
     return; 
    } 

    // Here, you know file.js has been loaded 
} 
-1

스크립트를 HTML 헤드로 이동하십시오.

+0

나는 할 수 없다. 머리 속에 들어 있지 않은 div에 삽입 됨 – BruteCode

+1

그래, 항상 머리 속에 스크립트를 넣는 것을 피해야합니다. (나는 아래 표결의 원천이 아니 었습니다.) – Grinn

+0

@ 그린 돌로 쓰여진 것이 아니라 ... – bfavaretto

2

당신은 수행하여 보장 할 수 있어야한다 .

+0

'script' 태그의'onload' 속성은 IE에서도 신뢰할 수 있습니까? 이전 IE는 코드를 통해 연결할 수있는'load' 이벤트를 발생시키지 않으므로'onload'가 그들과 함께 작동하지 않는다고 생각하는 경향이 있습니다 (그들은'onreadystatechange'를 대신합니다). –

+0

예, 이것은 이전 버전의 IE에서 문제가 될 수 있습니다. – techfoobar

1

아니 가장 좋은 방법이지만 이런 식으로 뭔가를 할 수 :

function checkIfLoaded(){ 
    if(typeof somefunctioninfilejs == 'function'){ 
    // load other script here 
    } 
    else { 
    // not loaded queue up a check 
    setTimeout(checkIfLoaded, 300); 
    } 
}