2011-06-19 22 views
5

thể trùng lặp:
Pass a PHP string to a Javascript variable (and escape newlines)hằng php trong một file javascript

Tôi đang làm việc trên một dự án và nó đã được thực hiện, nhưng nó cần thêm một midification và hằng số ngôn ngữ áp dụng của nó trong tệp javascript.

xem xét chúng tôi bao gồm một tập tin javascript và trong đó chúng ta có một cái gì đó như thế này

  alert("YOU Have VOTED BEFORE"); 

dễ dàng như vậy, kịch bản sẽ cảnh báo rằng văn bản

nhưng những gì nếu chúng ta cần phải cảnh báo một hằng số ngôn ngữ của nó:

  alert("<?php echo _VOTED_BEFORE?>"); 

này sẽ được làm việc chỉ khi tiếng vang kịch bản như inline mã php của tôi ...

nhưng, làm cách nào chúng ta có thể đọc và bao gồm hằng số php hoặc $ vars cho tệp JavaScript bên ngoài ???

Trả lời

4

Có một cách để làm điều này bằng một chuỗi truy vấn trong đường dẫn script

Xem câu trả lời của tôi ở đây

How to pass variable from php template to javascript

Đáng tiếc là điều này sẽ phá vỡ bộ nhớ cache cho file js của bạn để cân lựa chọn của bạn đầu tiên

<script type="text/javascript" src="script.js?flag=<?php echo _VOTED_BEFORE?>"></script> 

vì không viết quá nhiều mã tham khảo liên kết để xem cách truy xuất giá trị

+0

+1 cho câu hỏi, không nhất thiết cho giải pháp :) – mplungjan

+0

câu trả lời ngắn nhất và thú vị nhất trong mắt của tôi .. cảm ơn bro –

+0

hey trong tệp javascript, làm thế nào tôi có thể đọc các vars? –

1

Nếu nó không phải là tệp PHP, bạn không thể bao gồm các hàm echo PHP trong đó. Tôi đề nghị rằng nếu bạn muốn sử dụng một biến PHP trong các tệp js bên ngoài của bạn thì hãy khai báo nó như là một tệp toàn cục trong tệp PHP của bạn trước khi bạn tham khảo các js bên ngoài.

<script type="text/javascript"> 
    var globalvar = '<?php echo _VOTED_BEFORE ?>' ;  
</script> 
<script type="text/javascript" src="externalfile.js"></script> 

Mặc dù không phải lúc nào cũng có ý tưởng tốt để làm lộn xộn không gian tên chung.

+1

Bạn sẽ cần phải báo giá rằng trên máy khách hoặc trên máy chủ – mplungjan

+0

@mplungjan - Ý của bạn là gì? – Jivings

+0

Ông có nghĩa là vang vọng _VOTED_BEFORE sẽ xuất ra một chuỗi sẽ tạo ra một lỗi cú pháp trong javascript nếu bạn không bọc nó vào dấu ngoặc kép. – Dan

-1

Bạn có thể sử dụng cookie để lưu các hằng số và đọc chúng qua JavaScript hoặc bạn sẽ phải sử dụng AJAX

+0

Thật là một ý tưởng khủng khiếp khi gửi tất cả các bản dịch có thể trong một cookie hoặc để lãng phí các yêu cầu khi tất cả những gì bạn phải làm là tạo tệp js thành tệp php với loại mime – mplungjan

+0

Anh ấy nói rằng anh ấy đã biết làm nội tuyến .. đọc câu hỏi của mình một cách cẩn thận "điều này sẽ được làm việc chỉ khi echo kịch bản như nội tuyến của mã php của tôi ..." –

2

Trên thực tế, những gì bạn đã có được gần là thích hợp.

<?php 
// Valid constant names 
define("VOTED_BEFORE", "false"); 
?> 

<script type="text/javascript"> 
    alert("<?php echo VOTED_BEFORE;?>"); 
</script>  
+0

Nếu js ban đầu được bao gồm thông qua thẻ script này sẽ không hoạt động. – stefgosselin

7

Đối với một cấu trúc bụi, tôi nghĩ cách tốt nhất là để thiết lập tất cả các dữ liệu bạn nhận được từ PHP ở một nơi, tức là trong HTML bạn phục vụ thông qua PHP:

<script> 
    var MyNameSpace = { 
     config: 
      something: "<?php echo _VOTED_BEFORE ?>" 
     } 
    } 
</script> 

Trong JavaScript tệp mà bạn bao gồm sau đó, bạn có thể truy cập giá trị qua MyNameSpace.config.something.

Điều này giúp việc sử dụng lại tin nhắn trở nên dễ dàng hơn.

+0

Cách tuyệt vời để xử lý các hằng số PHP/Javascript. Cảm ơn! – user3089840

Các vấn đề liên quan