2010-04-15 1 views
3

개인 Linode에서 작동하는 멋진 PHP/HTML/JS 프로토 타입을 가지고 작업 기계에 던져 넣으려고했습니다.포트 8080에서 실행되는 Apache가 동적으로로드 된 스크립트를 JavaScript로 막지 않습니까?

페이지는 일부 JavaScript로 스크립트 태그를 동적으로 추가합니다. 다양한 타임 슬라이스를 기반으로 업데이트되는 수많은 Google 차트입니다. 그들은 DOM에 추가 될 때까지 존재하지 않는

// jQuery $.post to send the beginning and end timestamps 
$.post("channel_functions.php", data_to_post, function(data){ 
    // the data that's returned is the javascript I want to load 
    var script = document.createElement('script'); 
    var head= document.getElementsByTagName('head')[0]; 
    var script= document.createElement('script'); 
    var text = document.createTextNode(data); 
    script.type= 'text/javascript'; 
    script.id = 'chart_data'; 
    script.appendChild(text); 
    // Adding script tag to page 
    head.appendChild(script); 
    // Call the function I know were present in the script tag 
    loadTheCharts(); 
}); 

function loadTheCharts() { 
    // These are the functions that were loaded dynamically 
    // By this point the script tag is supposed be loaded, added and eval'd 
    function1(); 
    function2(); 
} 

기능 1() 및 기능 2(),하지만 난는 $ .post가 실행 된 후까지 loadTheCharts()를 호출하지 않습니다 그 코드는 다음과 같이 보입니다 그래서 이것은 문제가되지 않습니다.

나는 당신이 어머니에게 경고 한 더러운 PHP 코더 중 하나이기 때문에, 나는 전형적인 O'Reilly Go-to 책에서 읽은 것 이상으로 JavaScript에 정통하지 않다. 하지만이 코드는 내 개인용 dev 서버에서 제대로 작동하므로이 새로운 시스템에서 작동하지 않는 이유가 궁금합니다.

설치 프로그램의 유일한 차이점은 새 컴퓨터가 포트 8080에서 실행된다는 것입니다. 따라서 nicedomain.com/index.php 대신 192.168.blah.blah : 8080/index.php가됩니다.

웹 마스터 도구를 사용하여 "생성 된 소스보기"를 사용할 때 코드가 실제로 dom에 추가 된 것을 볼 수 있지만 파이어 버그에서는 모든 스크립트 태그가 "function2() undefined"와 같은 오류가 발생합니다. 추가 할 때 eval'ed.

내 질문 : 내가 뭘 배치했는지, 그리고 그 기계가 8080에서 돌아가고 있다는 것을 감안할 때 누군가 function2()와 같은 동적으로로드 된 함수가 Linode 8080에서 아파치를 돌리고있는 머신에는 없습니까?

+0

을,하지만 난 후 자바 스크립트 내가 생각하지 않습니다를 생성하는 PHP 스크립트에 POST를 통해 데이터를 제출하는 거니까 그게 선택이야. – buley

+1

덧붙여 말하자면 '

1

왜 응답 텍스트를 평가하지 않습니까? 새 스크립트 노드를 만들 필요가 없습니다.

$.post("channel_functions.php", data_to_post, 
     function (data, textStatus, xhr) {loadTheCharts()}, 
     'script'); 

그러나 "스크립트"의 dataType이 문서에 따라하는 GET으로 크로스 도메인 POST를 설정합니다 :

+0

전역 범위에서'function' 또는'var' 문으로 코드를 실행하려면이 작업을 수행해야합니다. 그렇지 않으면 호출자의 로컬 범위에 걸릴 수 있습니다. 보통 당신은 이것을 피하고 싶습니다. (물론'eval' 내부의'window.prop'에 쓸 수 있습니다.) – bobince

+0

경고 (데이터)를 수행하고 JS가 모두 잘 돌아가는 것을 볼 수 있으므로 반환되는 것을 알 수 있습니다. 그러나 평가 (데이터)와 함께 그 기능을 수행하면 기능이 여전히 "라이브"로 보이지 않습니다. 곤혹스러워! 이 문제는 범위 지정 문제로 생각됩니다. 창 밖에서 함수를 실행할 수있는 방법이 있습니까? window.loadTheCharts()와 같은 것? – buley

+0

@editor : 모든 "글로벌"기호는 실제로 전역 개체의 속성입니다. 브라우저에서, 이것은'window'이므로,'window.loadTheCharts()'는 (loadTheCharts가 다른 함수 내에서 정의되지 않았다면) 잘 동작 할 것입니다. – outis

관련 문제