2012-01-31 13 views
14

Zastanawiam się, czy można użyć zewnętrznego pliku JS zawierającego kod PHP.Użyj kodu PHP w zewnętrznym pliku JavaScript

mój zewnętrzny JS

$(document).ready(function(){ 

    $('#update').click(function(){ 
    var tableVal={}; 
    // a bit of php code I need in JS 
    var search_city=<?php echo $_SESSION['search_city'];?>'; 
$.post('<?=base_url()?>/project_detail/pub', {'tableVal':tableVal},function(message) 

     }) 
    }) 
}) 

moja strona widok

<script type="text/javascript" src="<?= base_url();?>js/external.js"></script> 

JS nie działa tak jak zakładamy, że kod PHP w JS jest problem. jakieś pomysły? Wielkie dzięki.

+2

Preprocesor nie przeanalizuje pliku, chyba że plik kończy się rozszerzeniem, które odwzorowuje odpowiedni typ zawartości, lub mówisz serwerowi, że PHP powinien obsługiwać żądania plików kończących się w .js –

+2

Innymi słowy, zmień "external.js" na "external.php". –

Odpowiedz

20

można to zrobić albo przez zmianę nazwy Ci js plik php i za pomocą tego linku w script tag src (jak wskazano w innych odpowiedziach)

Chociaż może się wydawać, że jest to dobry i łatwy sposób, istnieje wiele powodów, aby tego nie robić.

  • buforowanie (Twój wygenerowany skrypt nie będą buforowane, to może być zmieniony, ale wymagają dodatkowej pracy)
  • zużycie pamięci (każde żądanie to generowany js plik będzie wymagać php)

Można po prostu zmienione na coś takiego, aby to zrobić (w lepszy sposób, IMO):

<script type="text/javascript"> 
    var Settings = { 
    base_url: '<?= base_url() ?>', 
    search_city: '<?= $_SESSION['search_city'] ?>' 
    } 
</script> 
<script type="text/javascript" src="<?= base_url();?>js/external.js"></script> 

Niż zawartość Twojego js stało się coś takiego:

$(document).ready(function(){ 
    // I assume that not using search_city in your sample code 
    // and some syntax errors, is just by mistake... 
    $('#update').click(function(){ 
    var tableVal={search_city:Settings.search_city}; 
    $.post(Settings.base_url+'/project_detail/pub', 
    {'tableVal':tableVal}, 
    function(message){ 
     console.log(message); 
    }) 
    }) 
}) 
+0

Dzięki. Myślę, że twoja odpowiedź jest dla mnie dobra. +1 – FlyingCat

+0

co się stanie, jeśli użyję funkcji include ("external.js.php")? – FlyingCat

+0

Niż twoje 'js' będzie inline i przetwarzane. Będziesz musiał otoczyć go znacznikiem 'script' i będzie ok –

2

dość często coś do zrobienia, wystarczy zmienić nazwę pliku js na "external.js.php" (używam tej metody, ale tak długo, jak kończy się ona w php, nie ma znaczenia, czego naprawdę używasz) następnie zmień adres URL src w swoich znacznikach skryptu i dalej.

Pamiętaj, że może być konieczne dołączenie plików funkcji i konfiguracji do javascript dla tej funkcji base_url().

1

Wierzę, że jest to możliwe, ale jak wspomniał Brian, musisz poinformować preprocesora, że ​​potrzebuje go przetworzyć. Można też powiedzieć go używać php do obsługi js pliki (nie zalecane) lub po prostu użyć pliku .php na JavaScript, a następnie użyć:

<script type="text/javascript" src="<?= base_url();?>js/external.php"></script> 

to powinno być w porządku, ponieważ typ MIME jest jeszcze tak javascript będzie to interpretowane w ten sposób. Nigdy tak naprawdę nie próbowałem tego, więc jest to domysły, ale uważam, że powinno działać.

2

Jeśli nie potrzebujesz php do wielu rzeczy w pliku js, sugeruję, abyś nie robił tego, jak wspomniano powyżej, i nie zmieniaj nazwy pliku js na php, aby go przeanalizować. Pliki JS najlepiej służyć jako statyczne.

Jedną rzeczą, jaką można zrobić, to mieć skrypt na górze dokumentu php gdzie można przypisać zmienną base_url jako globalny być wykorzystywane przez wszystkich JS:

na swojej stronie, przed tym żadnych js

<script type="text/javascript">var base_url = "<?= base_url();?>";</script> 
<script type="text/javascript" src="<?= base_url();?>js/external.js"></script> 

w swoim js plik

$(document).ready(function(){ 

    $('#update').click(function(){ 
    var tableVal={}; 
    // a bit of php code I need in JS 
    var search_city=<?php echo $_SESSION['search_city'];?>'; 
    $.post(base_url+'/project_detail/pub', {'tableVal':tableVal},function(message) 

     }) 
    }) 
}) 
+0

W twoim 'js' nadal jest jakiś kod' php';) –

+0

dzięki za pomoc. Jak wspomniał Juicy. W pliku js nadal jest kod php. +1. – FlyingCat

+0

Zgadzam się. to jest dobry sposób bez utraty wydajności. deklarowanie zmiennych za pomocą wartości php w nim, a następnie użycie tych zmiennych w plikach js –

0

Tylko szybki pomysł, który może pomóc niektórym ludziom:

myślę (nigdy nie próbowałem) jest również sposób zapytać serwer WWW (Apache, etc) do niech pliki JS będą traktowane jako zawartość PHP.

Zalety:

  • Nie trzeba zmieniać nazwy plików JS do .js.php
  • wykorzystuje buforowanie
  • mogą być stosowane tylko do określonego folderu (nie do każdego pliku JS swojej stronie internetowej)

wycofuje:

  • Nie zapominaj, że te pliki "php" są gdzieś "buforowane", więc nie należy polegać na tym, że pliki są generowane za każdym razem.
  • Zasoby serwera: jak powiedziano w innych odpowiedziach, upewnij się, że używasz takiej sztuczki tylko wtedy, gdy nie jest możliwe umieszczenie kodu PHP poza plikami JS (na przykład za pomocą zapytań ajaxowych) lub plików, które nie ładują się serwer za dużo.
Powiązane problemy