2009-08-22 3 views
7

以下は、jqueryとPHPで見たコードの小さなスニペットです。JSにPHP変数が必要な場合、どうすればJavaScriptからPHPを分離できますか?

5行目にあるPHPの部分に注目してください。私は通常、JavaScriptを別々のファイルに入れています。私のJSを別々のファイルに保存するにはどうすればいいですか?

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

答えて

8

私は、一般的にやっていることは次のとおりです。

    .jsファイルにできるだけ多くのJSを置く
  • (クライアント側でキャッシュするために、すべてのこと)
  • これは、コードが使用するJS JS変数
  • JS変数はPHPファイルから宣言/初期化されています。これは実際には例えば

が、私はこのような何かを持っているでしょう、あなたはサーバー側で実行されるいくつかのコードを必要とする部分だけですが、私は考えます:

私-file.php:

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

PHPでは、変数を宣言してその値を設定します。これは「動的」な部分です。

と、私の-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) { 

、静的なJSファイルで、我々は唯一の値を使用します。ここには何も動的なものはなく、このファイルはクライアントによってキャッシュされ、各ページに再ダウンロードされることはありません。


そのアイデアの問題は、JSファイルがそう

:-(PHPファイルで行われ、いくつかの初期化に依存し、JSファイル内の「デフォルト値」を持つことは良い考えかもしれないです実際に、それは良い考えかもしれません;、念のために...


はまた、あなたは同じJS変数に応じて、/宣言/使用して複数のファイルを持っていないし、良いnamming規則を持っている必要がありますすべての "設定変数"を1つのjavascriptオブジェクトの中に入れて、グローバル名前空間を汚染しないようにしてください。

+0

素晴らしいthatsの、JSファイルが含まれている前または後にPHPがJSのVARを設定した場合、それはDiffereneのを作るのですか? – JasonDavis

+0

この場合、JSコードはページが完全にロードされたときに実行されます($(document).readyのため)。だからそれは多く変わるはずです;それ以外の場合は、ロード時にJSコ​​ードが変数を必要とする可能性があります。したがって、プレシジョンとして、私は、JSスクリプトをインクルードする前に常に変数の初期化を宣言する方が良いと思います。 –

+0

okありがとうございました。あなたのページの最後に> JSファイルを含めることをお勧めします。 – JasonDavis

3

JavaScriptとJavaScriptを分離しておきたい場合は、PHPファイルを使用して変数を設定するだけのJavascriptを生成してください。

HTML::

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

my.jsのJavascriptファイル:次に、あなたの.jsファイルからこれらの変数を使用し

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

これは動作するはずです、私が意味する、ファイルの.phpのですか? JSがクライアント側であるため、ブラウザはクライアントサイドのjavascriptを処理する前にphpエンジンを使用してPHPを処理する必要がありますか?

0

あり、すべてのJavaScriptとPHPを混合必要としないことを処理するための2つの基本的な方法です:PHPがページを生成しているとき

  1. は、それが非表示の入力にget_posts(0,$_SESSION['posts_start']);(その出力を書き込む必要がありフォーム(または他の場所ページ上)。JavaScriptは、その後JavaScriptがAJAX経由で別のPHP要求からその出力を取得してみましょう。

一般的に、それは変更されません値の一種だ場合

  • 、これを容易にアクセスすることができます訪問者がtをブラウズしている間他のコンテンツを動的に更新することはないため、変更するかどうかは気にしないでください)、ページに直接書き込んでください。

    JavaScriptとjQueryのは、あなたはいつもphpの「書き込み」の代わりに、<script src="script.php">を停止するには何もない静電気にもなるのJavaScriptのファイルを持つことができ

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

    のようなコードで簡単にその値を取得することができます...

    +0

    これを行うと、 'header(" Content-Type:text/javascript ")' – Macha

    +0

    を呼び出してもファイルをキャッシュできないことを確認してください。 – JasonDavis

    +0

    どうしましたか?それはJSファイルを見る(奇妙な拡張子であるにもかかわらず)。 – Macha

    0

    誰かがクリーンな答えに下がるまで:

    あなたはあなたのPHP/HTMLファイル内のグローバルjsの変数を定義し、スクリプトで参照することができます

    PHP/HTML:

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

    JS:私が考えていたものを

    ... 
    var initialPosts = global; 
    ... 
    
    関連する問題