如何将PHP变量的值传递给jQuery

23

我有一个PHP变量:

$name_of_current_page

我在视图中有一个可用的值,我想让这个值对jQuery可用。以下是最佳方式吗?

$(document).ready(function () {
            var current page = "<?php echo $name_of_current_page; ?>" ;

});

4
可以的,至少最简单的方式是这样的。如果你想要复杂一些,可以通过向服务器发起 AJAX 请求获取数据,然后以那种方式加载你的变量。 - Michael Rice
1
也许不是最好的,但能正常工作 :) - PiLHA
可能是如何将PHP变量传递给Javascript的重复问题。 - Michael Irigoyen
4个回答

32

这要看你是否使用了某种模板引擎。

  1. 如果你使用的是纯PHP,则唯一的选择是使用echo输出变量:

var current page = "<?php echo $your_var; ?>";
  • Twig模板引擎:

  • var current page = "{{ your_var }}";
    
  • SmartyRainTPL引擎:

  • var current page = "{$your_var}";
    

    正如您所见,还有其他方法可供选择,它们都能很好地发挥作用。这实际上取决于您希望如何编写和组织代码。我个人使用Twig,发现它非常简单、快速和直观。

    此外,正如其他人指出的那样,您可以通过AJAX调用服务器并获取变量。我认为这种方法耗时、低效且不安全。如果您选择此方法,将会向脚本发送请求。每个人都能够向该脚本发送post/get请求,这将为某些机器人和DoS/DDoS攻击打开大门。


    说使用AJAX会让机器人和DoS攻击进入你的网站,就好像说将任何东西放在网络上都会开启大门一样。虽然事实上是这样,但使用AJAX将数据拉入javascript有很多理由。每个主要的网站,比如Google、Facebook等都在使用。如果只是发布一个简单的index.php文件,里面写着<?php echo "Hello World"; ?>,那么他就会受到DoS攻击的威胁。如果他的Web服务被正确设计,那么他就不用太担心别人获取他的数据。 - Michael Rice
    @MichaelRice 别误会 - 使用 AJAX 很棒。但它也带来了一些问题。因此,应该明智地使用它。将 Google、Facebook 等与可能是中小型网站进行比较是错误的。Google 可以公开这些服务,因为他们拥有无限的系统资源,并且可以轻松处理机器人/DoS/DDoS,而中小型网站则会直接宕机。 - tftd

    6

    变量current page = "";

    我认为变量中不能有空格。(可能我错了)

    无论如何,为了简化你的代码,我稍微重写了它。

    $name_of_current_page = "HomePage";
    

    对于Javascript;
    var currentPage = "<?= $name_of_current_page; ?>";
    

    应该就是这样了。

    2
    你的变量名可以包含空格。除了 PHP 标签外,这是正确的方法。最好不要在 PHP 中使用短标签。请使用 "<?php" 代替 "<?=" [PHP 6 正式弃用短标签] 如果我没记错的话。 - Rens Tillmann
    @RensTillmann 我发现的一些东西表明,被移除的是短的 PHP 标签 (<??>),而短的 echo 标签 (<?= 和 ?>`) 是保留的。你有官方资源的链接吗? - Izkata
    对不起,我没有仔细阅读源代码:http://www.php.net/~derick/meeting-notes.html -(自PHP 5.4.0起,<?=始终可用) - Rens Tillmann
    @RensTillmann 谢谢你为我澄清这个问题。我不知道在Javascript中一个变量名可以有空格。 :P - Dhamesh Makwana

    0

    document.title 应该可以给你所需的内容。像这样的东西要么查询 DOM,要么使用 Ajax。

    我发现最好分离层次,不要混合呈现和控制器与带有 HTML/PHP 代码的混合。


    $name_of_current_page 不一定意味着 document.title - furas
    @furas 还可能意味着什么? - Zach Leighton
    1
    <h1>name_of_current_page</h1> 可以用于许多其他标签,如 title=&quot;...&quot;alt=&quot;..&quot;,出于某些 SEO 原因 ;) - furas
    谢谢,但在我的情况下,这不是页面标题。 - user1592380

    0
    首先,您所询问的是一种常规方法来填充客户端代码,但这个方法将在页面加载时加载,如果您想在页面加载后实时运行它,则必须使用Ajax,因为这是与服务器端脚本通信的方式,jQuery或JavaScript无法在页面加载后实时加载php变量。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接