2012-01-31 41 views
14

Tôi chỉ tự hỏi liệu có thể sử dụng tệp JS bên ngoài có chứa mã PHP hay không.Sử dụng mã PHP trong tệp Javascript bên ngoài

JS bên ngoài của tôi

$(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) 

     }) 
    }) 
}) 

trang điểm của tôi

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

Các JS không làm việc như tôi giả định rằng mã PHP trong JS là vấn đề. Có suy nghĩ gì không? Cảm ơn rất nhiều.

+2

Bộ tiền xử lý sẽ không phân tích cú pháp tệp trừ khi tệp kết thúc bằng phần mở rộng ánh xạ tới loại nội dung phù hợp hoặc bạn nói với máy chủ web của mình rằng PHP sẽ xử lý các yêu cầu cho tệp kết thúc bằng .js –

+2

Nói cách khác, thay đổi "external.js" thành "external.php". –

Trả lời

20

bạn có thể làm điều đó bởi một trong hai đổi tên bạn js tập tin để php và sử dụng liên kết này trong script thẻ src (như được chỉ ra trong các câu trả lời khác)

Mặc dù điều này có vẻ là một cách tốt và dễ dàng nhưng vẫn có nhiều lý do để không làm điều này.

  • Caching (kịch bản của bạn tạo ra sẽ không được lưu trữ, điều này có thể thay đổi nhưng yêu cầu công việc bổ sung)
  • tiêu thụ bộ nhớ (mọi yêu cầu này được tạo ra js tập tin sẽ đòi hỏi php)

Bạn có thể chỉ cần thay đổi thành một cái gì đó như thế này để hoàn thành (theo cách tốt hơn, 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> 

Hơn nội dung củacủa bạntrở thành một cái gì đó như thế này:

$(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

Cảm ơn. Tôi nghĩ câu trả lời của bạn tốt cho tôi. +1 – FlyingCat

+0

điều gì sẽ xảy ra nếu tôi sử dụng include ('external.js.php')? – FlyingCat

+0

So với 'js' của bạn sẽ được inline và xử lý. Bạn sẽ cần phải bao quanh nó với thẻ 'script' và nó sẽ là ok –

2

một điều khá phổ biến để làm, chỉ cần đổi tên tệp js thành "external.js.php" (tôi sử dụng phương pháp đó, nhưng miễn là nó kết thúc bằng php, không quan trọng bạn sử dụng thực sự) sau đó chỉ cần thay đổi url src trong thẻ script của bạn và đi bạn đi.

Đừng quên bạn có thể cần bao gồm chức năng và tệp cấu hình vào javascript để hàm base_url() đó hoạt động.

1

Tôi tin rằng điều đó là có thể, nhưng như Brian đã đề cập bạn phải cho người tiền xử lý biết rằng nó cần xử lý nó. Bạn có thể nói cho nó để sử dụng php để xử lý .js file (Không khuyến khích) hoặc đơn giản là sử dụng một tập tin .php cho javascript của bạn, sau đó sử dụng:

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

này sẽ không sao vì loại mime vẫn là javascript để nó sẽ được diễn giải theo cách đó. Tôi đã không bao giờ thực sự cố gắng này, vì vậy nó là một đoán, nhưng tôi tin rằng nó sẽ làm việc.

2

Trừ khi bạn cần php cho nhiều thứ trong tệp js, tôi khuyên bạn không nên làm như đã đề cập ở trên và không đổi tên tệp js thành php để phân tích cú pháp. Các tệp JS được phân phối tốt nhất là tĩnh.

Một điều bạn có thể làm là có một kịch bản ở phía trên cùng của tài liệu php của bạn, nơi bạn gán biến BASE_URL của bạn như một toàn cầu sẽ được sử dụng bởi tất cả các js của bạn:

Trong trang của bạn, trước khi đưa bất kỳ js

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

trong js bạn nộp

$(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

Vẫn còn một số mã 'php' trong' js';) –

+0

cảm ơn sự giúp đỡ của bạn. Như Juicy đã đề cập. Vẫn có mã php trong tệp js. 1 mặc dù. – FlyingCat

+0

đã đồng ý. đây là cách tốt mà không mất hiệu suất. khai báo các biến với các giá trị php trong nó và sau đó sử dụng các biến đó trong các tệp js –

0

Chỉ cần một ý tưởng nhanh chóng, có thể giúp một số người:

Tôi nghĩ (không bao giờ cố gắng) đó cũng là một cách để yêu cầu web server (Apache, vv) để cho phép các tệp JS được xử lý như nội dung PHP.

Ưu điểm:

  • Không cần phải đổi tên file JS của bạn để .js.php
  • Đưa lợi thế của bộ nhớ đệm
  • có thể được áp dụng duy nhất vào một thư mục cụ thể (không cho mọi tập tin JS của trang web của bạn)

rút:

  • Đừng quên rằng những tệp "php" đó được "lưu vào bộ nhớ cache" ở đâu đó, do đó, không dựa vào thực tế là các tệp được tạo ra mỗi lần.
  • Tài nguyên máy chủ: như đã nói trong các câu trả lời khác, hãy đảm bảo chỉ sử dụng mẹo như vậy khi thực sự không thể đặt mã PHP bên ngoài các tệp JS (sử dụng truy vấn ajax) hoặc trên các tệp không tải máy chủ quá nhiều.
Các vấn đề liên quan