2009-08-22 16 views
7

Aşağıda jquery ve PHP ile gördüğüm bir koddan küçük bir snippet var.JS bir PHP değişkenine ihtiyaç duyduğunda javascript'i PHP'den nasıl ayırabilirim?

Bildirimi hattı 5 PHP kısmı, ben genelde ayrı dosyalar halinde benim javascript koymak böylece nasıl ayrı dosyalarda benim JS tutmak ancak aşağıda gibi gerektiğinde hala PHP kullanmak mümkün olacaktır?

//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) { 

cevap

8

Ne genellikle do:

    bir .js dosyasında mümkün olduğunca JS koymak
  • (istemci tarafında önbelleğe alma için ve tüm bu)
  • bu kod, bir kullanır JS JS değişkeni
  • JS değişkeni bildirildi olduğunu/bir PHP dosyasından başlatıldı; Bu aslında Örneğin

, böyle bir şey olurdu, sunucu tarafında yürütülen bazı kod gerekir sadece bir kısmıdır herhalde:

my-file.php:

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

Yani, PHP'de, biz tha değişken bildirmek ve değerini ayarlayın. Bu "dinamik" kısmıdır.

ve benim-file.js içinde: Burada

//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) { 

, statik JS dosyasına, sadece değeri kullanın; Burada hiçbir şey dinamik değil ve bu dosya istemci tarafından önbelleğe alınabilir - her sayfada yeniden indirilmemelidir.


bu fikir sorun JS dosyası Yani

:-(PHP dosyasında yapılan bazı başlatma bağlıdır, JS dosyasına bir "varsayılan değeri" olması iyi bir fikir olabilir ihtimale karşı ...


Ayrıca, aynı JS değişkene bağlı/ilan/kullanarak birkaç dosya yok etmek, iyi bir namming kongre olması gerekir; bu iyi bir fikir olabilir, aslında, hiç ...

, tek javascript nesnesinin içinde tüm "yapılandırma değişkenleri" koymak genel ad alanını kirletmez için
+0

harika şu, bir differene yapar? – JasonDavis

+0

Bu durumda, JS kodu sayfa tam olarak yüklendiğinde ($ (document) .ready nedeniyle) yürütülecektir; bu yüzden çok değişmeli; Ancak, diğer durumlarda, JS kodu yüklendiği zaman değişkene ihtiyaç duyabilir; öyleyse, bir ön tanım olarak, JS betiğini eklemeden önce her zaman değişken bildirimi + ilklendirmenin daha iyi olacağını düşünüyorum. –

+0

ok teşekkürler, yahoo sayfanızın sonundaki> JS dosyanızın zaten dahil olmasını öneririm – JasonDavis

3

Eğer JavaScript sonra sadece değişkenleri ayarlamak için Javascript küçük bir yığın oluşturmak için bir PHP dosyası kullanmak, senin PHP ayrı tutmak istiyorsanız. Ardından .js dosyadan bu değişkenleri kullanın:

HTML:

//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

Bu çalışmalı, demek dosya .php geçerli: JavaScript dosyası

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

my.js

? JS istemci tarafında olduğu gibi tarayıcı istemci tarafı javascript işler ÖNCE, php php motoru aracılığıyla işleme alınmalıdır ?

0

o JavaScript ve hiç PHP karıştırma gerektirmeyen işlemek için iki temel yolu vardır:

  1. PHP sayfasını oluşturuyor, bu bir gizli girişine o çıktı (get_posts(0,$_SESSION['posts_start']); yazmak zorunda o değerin çeşit if (veya başka bir yerde sayfasında) formu. JavaScript sonra kolayca
  2. JavaScript AJAX ayrı PHP isteğinden bu çıktıyı getirsin.

Genellikle bu erişebilmesi değişiklik olmaz ziyaretçi gezerken o sayfa (veya başka bir içeriği dinamik olarak güncellemeyeceğiniz için değiştiğinde umursamıyorsanız), doğrudan sayfaya yazın.

JavaScript ve jQuery sonra hep php "yazma" bunun yerine <script src="script.php"> durdurmak için hiçbir şey statik elektriğe olmak zorunda javascript dosya olabilir

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

gibi koduyla kolaylıkla bu değeri getirebilir ...

+0

Bunu yaparsanız, 'header (" Content-Type: text/javascript ")' – Macha

+0

'u çağırdığınızdan emin olun, daha sonra dosyayı önbelleğe alamazsınız .. – JasonDavis

+0

Nasıl yapamazsınız? Bir JS dosyası (garip bir uzantı olsa da) görür. – Macha

0

birisi daha temiz bir cevap damla kadar:

Sen php/html dosyasında global js değişken tanımlamak ve komut dosyanızda buna referans verebilmek

:

php/html:

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

js: php önce veya JS dosyası dahil edildikten sonra JS Var ayarlarsa ne düşünüyordum

... 
var initialPosts = global; 
... 
İlgili konular