2013-12-17 1 views
1

Cloud9 IDE에서 동적으로 JavaScript를로드하는 데 문제가 있습니다 (https://c9.io/etlolap/webapp).Cloud9에서 동적 JavaScript로드시 jQuery 문제

(https://c9.io/etlolap/webapp/socket.js)의 서버 파일은 프로젝트의 파일 시스템을 모니터링하고 변경된 파일을 감지하며 변경된 파일을 socket.io를 통해 클라이언트에 보냅니다. 그것은 잘 작동하므로 여기에 내용을 직접 넣지 않아도됩니다.

데이터 파일 (https://c9.io/etlolap/webapp/public/js/data.js)에는 한 줄만 포함됩니다.

var b = "Goodbye!"; 

(https://c9.io/etlolap/webapp/socket.html)의 클라이언트 파일이 data.js.에서 변수 B의 값을 표시합니다

var b = "Hello World!"; 

나중에, 우리는로 변경 파일이 변경된 경우 ("Goodbye!"), data.js의 새 버전이 다시로드되고 b의 새 값이 자동으로 표시됩니다.

<!doctype html> 
<!--socket.html- dynamic JS loading example --> 
<html> 
    <head> 
    <script type="text/javascript" src="https://webapp-c9-etlolap.c9.io/public/js/jq/jquery-1.9.1.js"></script> 
    <script src="https://webapp-c9-etlolap.c9.io/socket.io/socket.io.js"></script> 
    <script id="script_a" src="https://webapp-c9-etlolap.c9.io/public/js/data.js"></script> 
    <script> 
     $(function(){ 
     $('body').html(b); 
     }); 
     io.connect("https://webapp-c9-etlolap.c9.io") 
     .on('script', function(path){ 
      $('#script_a').remove(); 
      $('head').append(
      '<script id="script_a" src="https://webapp-c9-etlolap.c9.io' 
      + path + 
      '"></scr' + 'ipt>' 
     ); 
      $('body').html(b); //<---culprit! 
     }); 
    </script> 
    </head> 
    <body> 
    Loading... 
    </body> 
</html> 

모든 것이 socket.io를 포함하여 잘 작동합니다. 유일한 문제는 b의 새 값을 새로 고칠 수 없다는 것입니다. 디버거에서는 iolconnect(). on() 내부의 $('body').html(b);에서 b의 새 값이 새로 고쳐지지 않고 여전히 "Hello World!"이라는 것을 보여주었습니다.

복용량을 아는 사람은 누구입니까? 새 버전의 data.js를 socket.html에 새로 고침하려면 어떻게해야합니까?

+0

그리고 클라우드 십오 일을 피하려고하는 이유는 – Markasoftware

답변

0

본문을 업데이트하기 전에 스크립트를 추가하고로드 될 때까지 기다리지 않는 것을 확인했습니다. 난 그냥 작업 공간에 시도

:

setTimeout(function() { 
    $('body').html(b); 
}, 1000); 

그리고 예상대로 일했다. 그래서, 그것은 Cloud9 스크립트 로딩 문제가 아닙니다.

로드 된 스크립트 파일 내에서 업데이트를 시도 할 수도 있습니다.

모스 타파, Cloud9 IDE 개발자

관련 문제