html/JavaScript/php:如何使用“全局变量”?

w46czmvw  于 12个月前  发布在  PHP
关注(0)|答案(5)|浏览(172)

所以我的域名将从在我的计算机上构建它(localhost)更改为我实际部署它时的域名,我不想回去,不得不在一百万个地方更改它。现在我知道我可以在php中做一个超级全局变量
第一个月
但据我所知,你不能在单独的.js文件中使用它。我如何为我的域名创建一个可以在html和js中使用的“全局变量”?

3vpjnl9f

3vpjnl9f1#

在索引文件的头中打印(或在php include中在头标记中打印)

任何js文件都可以使用在其上同一作用域级别中定义变量,即使是在其他文件中也是如此
http://www.w3schools.com/js/js_scope.asp
常见的形式是,在任何其他调用之前,在标记内部和处定义所有的“全局”js变量。
出于以下几个原因,我们不鼓励将php打印到js文件中,尽管我听说这是可能的,但如果您在多个地方需要它,请使用php include:

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

字符串
因此,如果您在php索引文件的顶部或您放置的include文件中有类似的内容:

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


那么它就可以在那个点之后的任何地方被用作标准变量。

**附带说明:使用对象 Package **

顺便说一下,您可以将它 Package 在一个对象中,然后将该对象传递给其他文件,例如:

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?

ar5n3qh5

ar5n3qh52#

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

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

字符串
使用json_encode是因为它提供了一种安全可靠的方式,以JS理解的格式传递数据,并且适用于真实的数组,PHP“数组”,数字,字符串,任何你想要的。

dxxyhpgq

dxxyhpgq3#

试试这个:

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

字符串
通过使用您的窗口,它将可用于所有您的网站
参见:Define global variable in a JavaScript function

ldxq2e6h

ldxq2e6h4#

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

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

字符串
而不是到处使用,所以只需要改变ROOT的值

tvokkenx

tvokkenx5#

永远不会太迟!
通常,在js脚本中使用php并不是一个好的做法。
而不是用...

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

字符串
.你可以考虑使用一个 data- 属性,如:

<script data-base-url="<?=json_encode($baseURL)?>">
let baseURL = document.currentScript.getAttribute("data-base-url");
</script>


或者,您可以将上述js代码包含在任何单独的js脚本中,只需将 data-base-url 属性添加到将此脚本插入HTML的script标记中。

相关问题