2010-01-25 6 views
2

(수사학상의 질문)Ajax를 사용하여 Javascript 기능을 동적으로로드 할 수 있습니까?

나는 PHP가 자바 스크립트가 어떻게 작동 하는지를 업데이트하기를 원했던 기괴한 시나리오를 만났다. 그것은 여기

/* 
* ajax-php-javascript-function-loader.php 
* 
* this gets called by AJAX and defines or re-defines the 
* definition of dynamicDoStuff() 
*/ 
<script type="text/javascript"> 
    function dynamicDoStuff(a,b){ 
      <?php 
      //dynamically defined function behavior 
      ?> 
    } 
</script> 

새로운 자바 스크립트가로드되었을 때, 그것은 새로운 함수 정의의 범위를 때문에이 작동하지 않았다가 새 스크립트 태그로 제한 ... 내가 뭘하려 자극적이었다. 페이지의 다른 곳에서 스크립트를 읽을 수 없습니다.

여기해야 할 일이 있습니다.

/* 
* index.html 
*/ 
<html> 
    <head> 
     <script type="text/javascript"> 
      var dynamicDoStuff; 
     </script> 
     <!-- Other Head Stuff --> 
    </head> 
    <body> 
     <!-- the body of the site --> 
    </body> 
</html> 

/* 
* axax-php-javascript-function-loader.php 
*/ 
<script type="text/javascript"> 
    dynamicDoStuff = function(a,b){ 
     <?php 
     //dynamically define function behavior 
     ?> 
    } 
</script> 

헤더에있는 함수의 이름을 정의하여 전 세계적으로 접근하게 당신은 동적으로 아약스를 사용 (PHP 또는 무엇이든)

+1

당신이 묘사하는 행동은 ajax 응답 내의'

0

더 좋은 방법은이 경우, 플래그는 질문에 당신의 방법을 채택해야하는 동작을 나타내는, 당신의 AJAX 방식의 반환 데이터 가질 수 있습니다.

var ajaxResponseHandler = function(jsonResponse) { 
    dynamicDoStuff = jsonResponse.someFlagFromTheServer == someExpectedValue 
     ? staticDoStuffA 
     : staticDoStuffB; 
}; 

적어도 대부분의 상황에서 AJAX 메서드는 어쨌든 데이터를 반환해야합니다.

또한이 방법을 사용하면 PHP로 JavaScript를 믹싱하는 대신 클라이언트가 이미로드 한 일반 JavaScript 파일에 필요한 대체 동작을 정의 할 수 있습니다.

+0

분명히 이것은 대부분의 상황에 해당됩니다. 필자의 경우 PHP로 내용을 작성한 Prototype 창을로드하고있었습니다. 프로토 타입 윈도우 내의 요소의 동작은 사용자가 누구인지, 지금까지 무엇을했는지, 그리고 그들이 무엇을 보았는지 등 다양한 요인에 의해 결정됩니다. 가장 간단한 경로는 동작을 직접 정의하는 것이 었습니다. 나는 다른 상황, 특히 역동적이거나 폐회로 인 상황을 상상할 수 있는데, 이것은 유용 할 것이다. – Brooks

+0

또한 ...이 디자인 패턴은 기능이 모호하게 정의되고 해당 모듈의 아젠다에 맞게 (즉, 동적으로로드 및 언로드되도록) 즉석에서 사용자 정의 할 수 있으므로 많은 모듈성을 허용합니다. – Brooks

관련 문제