2013-12-16 3 views
3

내 뷰 (PHP)에 모든 자바 스크립트 코드가 있습니다. 그러나 나는 그것을 분리하기를 원한다 (중복 된 코드를 삭제하기 위해). 나는 현재 CodeIgniter의 프레임 워크를 사용하고 현재 나는 다음과 같은 기능을 사용PHP에서 자바 스크립트로 변수를 전달하는 방법

$(function() { 
    $("#serialNumber").autocomplete({ 
     source: "<?php echo site_url('manage/getSerials'); ?>", 
     change: function(event, ui) { 
      if (!ui.item) { 
       $(event.target).val(""); 
      } 
     }, 
     focus: function(event, ui) { 
      return false; 
     } 
    }); 
}); 

당신이 PHP를 내부에 자바 스크립트 변수를 사용할 수 없습니다 그러나.

그래서 각 링크 변수를 만들고 내 자바 스크립트에서 사용하거나 별도의 PHP 파일에서 자바 스크립트를 사용하거나 거기에 더 좋은 방법이 있습니까?

ToniTornado의 도움으로 답 :

먼저이 같은 기능을합니다

function getURL(link) { 
    var site = "<?php echo site_url(); ?>"; 
    site += "/" + link; 
    return site; 
} 

의 모든 JQuery와, CSS 파일이 을 어디에 당신의 컬렉션은 다음과 같은 기능을 사용하는 것이 포함를 (jQuery를이) :

내 의견, 자바 스크립트로 PHP에서 많은 변수를 전달하는 가장 좋은 방법으로
$(function() { 
    $("#serialNumber").autocomplete({ 
     source: getURL('controller/function'), 
     change: function(event, ui) { 
      if (!ui.item) { 
       $(event.target).val(""); 
      } 
     }, 
     focus: function(event, ui) { 
      return false; 
     } 
    }); 
}); 

답변

4

는 PHP 객체, 전환에서 그 (것)들을 수집하는 것입니다 객체를 JSON으로 가져 와서 웹 사이트의 스크립트 태그에 출력하십시오. 컨트롤러에서

는 :

$config = new stdClass(); 
$config->site_url = site_url('manage/getSerials'); 
$config->user_name = 'David'; 

...보기에 어떻게 든 $config VAR를 전달합니다.

<script type="text/javascript"> 
    var MyConfig = { 
    site_url: "what/your/function/returned", 
    user_name: "David" 
    } 
</script> 

그리고 마지막으로 당신의 자바 스크립트 파일에이처럼 바르 액세스 :

console.log(MyConfig.site_url) 

글로벌 자바 스크립트 그것은이 코드를 생성합니다

<script type="text/javascript"> 
    var MyConfig = <?= json_encode($config); ?> // global var "MyConfig" 
</script> 

:보기에

var MyConfig에는 모든 동적 변수의 이름 공간을 i n 자바 스크립트 객체.

+0

답변 해 주셔서 감사합니다. 이 기능을 전달하는 가장 좋은 방법 중 하나라고 생각합니다. 문제는 같은 함수에 이중 URL을 만들 필요가 있다는 것입니다. – David

+0

반갑습니다. "이중 URL"이란 무엇을 의미합니까? – ToniTornado

+0

뷰를로드하기 전에 함수를 선언하고이 함수 대신에 변수를 사용해야합니다. :) – David

1

당신은 PHP 배열을 만들고처럼 JS 기능에 대한 새 항목을 당신이 링크를 생성 할 때마다 추가 할 수 있습니다

$links['refence'] = site_url('manage/getSerials'); 

* refence = 포함 JS 객체의 재산 JS 변수 또는 이름의 이름 모든 링크. 상기와 모든보기의 지금

(전)이을 만들 수 있습니다 :

<script type="text/javascript"> 
    var refLink = { 
     <?php foreach($links as $key => $link): ?> 
      <?php echo $key; ?> : <?php echo $link; ?>, 
     <?php endif; ?> 
    } 
</script> 

을 OBJ refLink (이 소품 ondom 준비를 사용하는 경우)와 같은 evalued됩니다

var refLink = { 
    link1 : "yourpath/action", 
    link2 : "yourpath/action2", 
    link3 : "yourpath/action3", 
} 

이제는 복잡한 JS 내부에서 php을 사용할 필요가 없지만 모두 단일 js 내부에 있습니다.

$(function() { 
      $("#serialNumber").autocomplete({ 
       source: refLink.link3, //link3 is the key of you php array. 
       change: function(event, ui) { 
        if (!ui.item) { 
         $(event.target).val(""); 
        } 
       }, 
       focus: function(event, ui) { 
        return false; 
       } 
      }); 
     }); 

이것은 ...어쩌면 최선은 아닐지 모르지만 ... 시도하고 싶다면 ....

+0

답변 해 주셔서 감사합니다. 아마도 가장 좋은 방법은 PHP 문서에 스크립트 태그를 포함시키는 것입니다. – David

+1

javascript 객체 또는 JSONP가 포함 된 텍스트/자바 스크립트 헤더를 반환하는 "base path/config.js"와 같은 URL에 응답하는보기를 만들 수 있지만 PHP 응용 프로그램 아키텍처에 따라 다릅니다. 제 생각에 ... 가장 좋은 방법은 당신에게 가장 쉬운 방법이지만 생각하는 것입니다. – Frogmouth

+2

foreach 루프 대신 $ 링크에서 json_encode()를 호출 할 수 있습니다. – ToniTornado

관련 문제