【问题标题】:html/javascript/php: how do i use a "global variable"?html/javascript/php:如何使用“全局变量”?
【发布时间】:2015-11-03 05:04:18
【问题描述】:

所以我的域名将从在我的计算机上构建它(本地主机)更改为我实际部署它时的域名,我不想回去并且必须以百万为单位进行更改地方。现在我知道我可以在 php 中做一个超全局变量

<?php echo $GLOBALS['domain_name']; ?>

但据我所知,您不能在单独的 .js 文件中使用它。如何为我的域名创建一个可以在 html 和 js 中使用的“全局变量”?

【问题讨论】:

  • 请注意,您可以创建一个头文件,在其中首先声明所有默认 (PHP) 加载内容,包括您的域名。这将帮助您避免使用全局变量,并且将所有相同的旧功能分开会更好。
  • 为什么不在页面中使用相对链接?那么文件的实际位置就无关紧要了。
  • 是PHP全局还是JavaScript全局? (HTML 没有变量。)
  • @jeff:有时相对链接不是一种选择。例如,如果您有一个在//foo/bar URL 中处理的布局模板,并且它包含样式表/JS/字体/图像引用,则没有绝对链接(或计算您的调用者代码是现在,这比只知道你的基本 URL 还要混乱)。

标签: javascript php


【解决方案1】:

打印在索引文件的头部(或在 php 中包含在头部标签中)

任何 js 文件都可以使用定义在它上面的同一作用域级别的变量,即使在其他文件中也是如此。

http://www.w3schools.com/js/js_scope.asp

常见的形式是,在标签内部和任何其他调用之前,定义所有“全局”js变量。

出于几个原因,强烈建议不要将 php 打印到 js 文件中,尽管我听说它可能,但如果您在多个地方需要它,只需使用 php 包含:

<html>
<?php
  // include any shared content, in this case i include entire <head> section
  include('header.php');
?>
<body>

所以如果你在你的 php 索引文件的顶部有这样的东西,或者在一个包含你放在那里的地方:

<script>
  var baseUrl = "<?php echo $GLOBALS['domain_name']; ?>";
</script>

然后可以在该点之后的任何地方用作标准变量。


旁注:使用对象包装器

作为旁注,您可以将其包装在一个对象中并将该对象传递给其他文件,例如:

var AppData = {};
AppData.domain_name = "<?php echo $GLOBALS['domain_name']; ?>";
AppData.googleTrackerUID = "<?php echo $GLOBALS['gtrackerid']; ?>";
AppData.whatever = true;

fnct_from_earlier_point_or_elsewhere(AppData);

只有当你认为你可能需要传递任何其他设置,或者只是想为这种可能性进行构建时才真正有用(特别是如果可选参数,因为很容易制作可重用函数来处理如果索引不存在)

我更喜欢对象方法,但如果不需要,不要过于复杂。


编辑

正如@Amadan 评论的那样,在 php 中创建 $AppData 数组/对象会更容易,然后调用它:

var AppData = <?php echo json_encode($AppData); ?>;

另外,关于有人发帖省略“var”关键字,它通常是不好的形式,因为 var 并不能阻止它是全局的,并且某些浏览器 (IE) 存在一些问题

javascript var or not var, what's the difference?

【讨论】:

  • 正如我所说,如果你只写AppData = &lt;?php echo json_encode($AppData); ?&gt;,对象方法非常好,非常简单;这样,它的代码更少,您不关心数据类型,并且如果您的某个设置恰好包含双引号,它也不会破坏您的代码。
【解决方案2】:

您可以将任何 PHP 值注入客户端。

<script>
  var baseURL = <?php echo json_encode($baseURL); ?>;
</script>

使用json_encode,因为这提供了以 JS 理解的格式传递数据的万无一失的安全方式,并且适用于真实数组、PHP“数组”、数字、字符串,以及任何你想要的。

【讨论】:

  • 当然可以,但我想在单独的 .js 文件中执行此操作...这行得通吗?
  • 理论上是可以的,如果你用php执行js文件的话。但你不应该。这个想法是在您的网页标题中注入所有 JS 代码所需的常量;您的代码可以保留在单独的 JS 文件中。该变量是全局变量(即在window 上定义),意味着您可以从任何地方访问它 - 包括从其他 JS 文件。
【解决方案3】:

试试这个:

<script>    
window.yourGlobalVariable = ....
</script>

通过使用您的窗口,您的所有网站都可以使用它

见: Define global variable in a JavaScript function

【讨论】:

    【解决方案4】:

    你可以有一个像 const.php 这样的文件

     define('ROOT','http://127.0.0.1/');
    

    而不是到处使用,所以只需要更改 ROOT 的值

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 2011-03-28
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      相关资源
      最近更新 更多