当JS需要PHP变量时,如何从PHP中分离javascript?

时间:2009-08-22 15:30:16

标签: php javascript jquery

下面是我用jquery和PHP看到的代码中的一个小片段。

注意第5行的PHP部分,我通常把我的javascript放到单独的文件中,这样我怎样才能将我的JS保存在单独的文件中,但是在需要时仍然使用PHP,如下所示?

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

6 个答案:

答案 0 :(得分:9)

我通常做的是:

  • 尽可能多地将JS放在.js文件中(用于客户端的缓存以及所有这些)
  • 此JS代码使用JS变量
  • 从PHP文件声明/初始化JS变量;这是您需要在服务器端执行某些代码的唯一部分,实际上是

例如,我想我会有这样的事情:

my-file.php:

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

因此,在PHP中,我们声明变量并设置其值。这是“动态”部分。

,在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) {

这里,在静态JS文件中,我们只使用该值;这里的任何内容都不是动态的,客户端可以缓存此文件 - 不能在每个页面上重新下载。


这个想法的问题是JS文件依赖于在PHP文件中完成的一些初始化: - (

所以,在JS文件中有一个“默认值”可能是个好主意,以防万一......


此外,你必须有一个很好的命名约定,没有几个文件使用/声明/取决于相同的JS变量;实际上,将所有“配置变量”放在一个javascript对象中,不污染全局命名空间可能是一个好主意......

答案 1 :(得分:3)

如果你想让你的Javascript与PHP分开,那么使用PHP文件生成一小部分Javascript来设置变量。然后使用.js文件中的那些变量:

HTML:

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

my.js Javascript文件:

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

答案 2 :(得分:1)

你总是可以让php“写”javascript文件而不是静态 - 没有什么可以阻止<script src="script.php"> ......

答案 3 :(得分:0)

有两种基本方法可以处理不需要混合使用JavaScript和PHP的方法:

  1. 当PHP生成页面时,让它将输出(get_posts(0,$_SESSION['posts_start']);)写入表单上的隐藏输入(或页面上的其他位置)。然后,JavaScript可以轻松访问
  2. 让JavaScript通过AJAX从单独的PHP请求中获取该输出。
  3. 通常情况下,如果访问者浏览页面时这种值不会改变(或者您不关心它是否发生变化,因为您不会动态更新其他内容),请直接将其写入页面。

    然后JavaScript和jQuery可以使用

    之类的代码轻松获取该值
    var initialPosts = $("#that-hidden-field-mentioned-earlier").val();
    

答案 4 :(得分:0)

直到有人拒绝更清洁的答案:

您可以在php / html文件中定义全局js变量,并在脚本中引用它:

的PHP / HTML:

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

JS:

...
var initialPosts = global;
...

答案 5 :(得分:-5)

这应该有用,我的意思是文件.php? 由于JS是客户端,因此在浏览器处理客户端javascript之前,应该通过php引擎处理php吗?