2009-08-22 27 views
7

Dưới đây là một đoạn mã nhỏ từ mã tôi thấy với jquery và PHP.Làm thế nào tôi có thể tách javascript từ PHP khi JS cần một biến PHP?

Lưu ý phần PHP trên dòng 5, tôi thường đặt javascript của mình vào các tệp riêng biệt sao cho tôi có thể giữ JS của mình trong các tệp riêng biệt nhưng vẫn sử dụng PHP khi cần như dưới đây?

//when the DOM is ready 
$(document).ready(function(){ 
    //settings on top 
    var domain = 'http://davidwalsh.name/'; 
    var initialPosts = <?php echo get_posts(0,$_SESSION['posts_start']); ?>; 
    //function that creates posts 
    var postHandler = function(postsJSON) { 
     $.each(postsJSON,function(i,post) { 

Trả lời

8

Những gì tôi thường làm là:

  • đặt càng nhiều càng tốt JS trong một file .js (đối với bộ nhớ đệm trên client-side và tất cả những gì)
  • này JS mã sử dụng một Biến JS
  • biến JS được khai báo/khởi tạo từ tệp PHP; đây là phần duy nhất mà bạn cần một số mã thực thi trên server-side, trên thực tế

Ví dụ, tôi sẽ có một cái gì đó như thế này, tôi cho rằng:

my-file.php:

var thisIsMyJSVar = '<?php echo $test; ?>'; 

Vì vậy, trong PHP, chúng tôi khai báo biến tha và đặt giá trị của nó. Đây là phần "động".

và trong my-file.js:

//when the DOM is ready 
$(document).ready(function(){ 
    //settings on top 
    var domain = 'http://davidwalsh.name/'; 
    var initialPosts = thisIsMyJSVar; // Use the JS variable declared in the PHP file 
    //function that creates posts 
    var postHandler = function(postsJSON) { 
     $.each(postsJSON,function(i,post) { 

Ở đây, trong các tập tin JS tĩnh, chúng tôi chỉ sử dụng giá trị; không có gì ở đây là động và tệp này có thể được lưu vào bộ nhớ cache bởi ứng dụng khách - để không được tải xuống lại trên mỗi trang.


Vấn đề với ý tưởng đó là file JS phụ thuộc vào một số khởi động thực hiện trong file PHP :-(

Vì vậy, nó có thể là một ý tưởng tốt để có một "giá trị mặc định" trong tập tin JS , chỉ trong trường hợp ...


Ngoài ra, bạn phải có quy ước đặt tên tốt, không có nhiều tệp sử dụng/khai báo/tùy thuộc vào biến JS giống nhau, có thể là một ý tưởng hay, đặt tất cả "biến cấu hình" của bạn bên trong một đối tượng javascript duy nhất, để không gây ô nhiễm không gian tên chung ...

+0

thats lớn những gì tôi đã suy nghĩ, nó làm cho một differene nếu php đặt var JS trước hoặc sau khi tập tin JS được bao gồm? – JasonDavis

+0

Trong trường hợp này, mã JS sẽ được thực hiện khi trang được tải hoàn toàn (vì $ (tài liệu) .ready); vì vậy nó sẽ thay đổi nhiều ;; nhưng, trong các trường hợp khác, mã JS có thể cần biến ngay khi được tải; vì vậy, như là một precuation, tôi nghĩ rằng nó sẽ là tốt hơn để luôn luôn tuyên bố + khởi tạo biến trước khi bao gồm các kịch bản JS. –

+0

ok cảm ơn, tôi nghĩ yahoo khuyên bạn nên bao gồm tệp JS của bạn ở cuối trang anyways – JasonDavis

3

Nếu bạn muốn giữ Javascript tách biệt với PHP của mình, hãy sử dụng tệp PHP để tạo một đoạn nhỏ Javascript chỉ để đặt biến. Sau đó sử dụng các biến từ file .js của bạn:

HTML:

<script> 
var INITIAL_POSTS = <?php echo get_posts(0,$_SESSION['posts_start']); ?>; 
</script> 
<script src="my.js"> 

my.js Javascript file:

//when the DOM is ready 
$(document).ready(function(){ 
    //settings on top 
    var domain = 'http://davidwalsh.name/'; 
    var initialPosts = INITIAL_POSTS; 
    //function that creates posts 
    var postHandler = function(postsJSON) { 
     $.each(postsJSON,function(i,post) { 
-5

này nên làm việc, tôi có nghĩa là file .php? Vì JS là phía máy khách, nên xử lý php thông qua công cụ php TRƯỚC KHI trình duyệt xử lý javascript phía máy khách?

0

Có hai cách cơ bản để xử lý mà không cần trộn JavaScript và PHP ở tất cả:

  1. Khi PHP đang tạo trang, có nó viết rằng đầu ra (get_posts(0,$_SESSION['posts_start']); vào một đầu vào ẩn trên hình thức (hay ở nơi khác trên trang). JavaScript sau đó có thể truy cập này dễ dàng
  2. Hãy lấy JavaScript mà đầu ra từ một yêu cầu PHP riêng biệt thông qua AJAX.

Nói chung, nếu đó là loại giá trị mà sẽ không thay đổi trong khi khách truy cập đang duyệt t trang của anh ấy (hoặc bạn không quan tâm nếu nó thay đổi, vì bạn sẽ không cập nhật nội dung khác động), hãy viết trực tiếp lên trang.

JavaScript và jQuery sau đó có thể lấy giá trị đó một cách dễ dàng với các mã như

var initialPosts = $("#that-hidden-field-mentioned-earlier").val(); 
1

Bạn luôn có thể có php "ghi" các tập tin javascript thay vì nó được static- có gì để ngăn chặn <script src="script.php"> là ...

+0

Nếu bạn làm điều này, hãy chắc chắn bạn gọi 'header (" Content-Type: text/javascript ")' – Macha

+0

sau đó nó không thể cache tập tin mặc dù .. – JasonDavis

+0

Làm thế nào có thể nó? Nó nhìn thấy một tập tin JS (mặc dù với một phần mở rộng lạ). – Macha

0

cho đến khi một người nào đó rơi vào một câu trả lời sạch:

bạn có thể định nghĩa một biến js toàn cầu trong file php/html của bạn, và tham khảo nó trong kịch bản của bạn:

php/html:

<script> 
var global = <?php echo get_posts(0,$_SESSION['posts_start']); ?>; 
</script> 

js:

... 
var initialPosts = global; 
... 
Các vấn đề liên quan