【问题标题】:import php variables in javascript [duplicate]在javascript中导入php变量[重复]
【发布时间】:2013-03-16 12:35:12
【问题描述】:

我有一个名为english.php 的文件,其中包含大量变量值。 $LANG 数组的所有部分。

例子:

$LANG['value_1']="abc";

$LANG['value_2']="xyz";

然后我有一百万个使用require_once('english.php');的不同.php文件

这很好,但我也有很多我正在使用的 javascript 和 jquery 插件。它们都有外部 .js 文件。如何在 javascript 中获取 $LANG 的值以使其在 .js 文件中可用?

我想我需要在 .js 的顶部添加代码,以便在运行其余的 javascript 代码之前以某种方式读取 .php 数据。我只是完全不知道该怎么做。

我已经看到了一些可能的想法,但我真的不想对所有内容进行重大重写。寻找一个简单的解决方案。谁能帮助这个无知的新手?

======= 根据收到的 cmets 添加更多信息 =======

我现在有一个包含这段代码的 lang.php...

<?php
session_cache_limiter('nocache');
session_start();
require_once ($_SESSION['language'].'.php');


$js_out = json_encode($LANG);

?>
<script>
    var LANG = <?php echo $js_out; ?>;
    alert(LANG.value_1);
</script>

当我访问 lang.php 时,它会成功访问english.php 并提醒'abc'

我的问题是当添加到不同的文件时这不起作用...

<script type='text/javascript' src='lang.php'></script>
<script>
    alert(LANG.value_1);
</script>

======= 编辑添加解决方案 =======

感谢下面的人的cmets,我摆脱了lang.php文件中的&lt;script&gt;并且它起作用了。

我现在有一个包含这段代码的 lang.php...

<?php
session_cache_limiter('nocache');
session_start();
require_once ($_SESSION['language'].'.php');


$js_out = json_encode($LANG);

?>

var LANG = <?php echo $js_out; ?>;

【问题讨论】:

  • 使用 json_encode 并将数据放置在您的 JS 可以访问的位置。如果不知道您的项目是如何组织的,就很难说。为什么你的 JS 需要翻译表?
  • 您不会从 JavaScript 中获取 PHP 变量,反之亦然。 PHP 将其变量告诉 JavaScript。因此,无论您在哪里包含脚本(可能是 &lt;script&gt; 标签所在的位置),您都需要将这些页面设为 PHP 和 echo 或您需要对脚本执行的任何操作。
  • 如果english.php 中有这么多数据(我假设你正在做动态区域页面或类似的),我建议将此作为对 php 的 ajax 调用来请求特定的键列表将整个事情转储到 JavaScript 中。
  • @Bergi 你不能在 .js 文件中运行 php 代码

标签: php javascript


【解决方案1】:

english.php 中可以有如下代码:

<?php


$LANG['value_1']="abc";
$LANG['value_2']="xyz";

$js_out = json_encode($LANG);

?>
<script>
    var LANG = <?php echo $js_out; ?>;
</script>

页面加载后,您的 javascript 可以看到 LANG。

【讨论】:

  • 我认为 javascript 不支持关联数组,所以 LANG['value_1'] 可以在 javascript 中工作吗?
  • 这是一个 json 对象,因此您可以像这样访问成员:LANG.value_1
  • 在原始帖子中查看我的编辑。我添加了更多信息。
  • 查看您更新的代码:我认为问题出在双脚本标签上。 lang.php 生成包含在 中的输出。然后浏览器将其解释为 javascript,我怀疑遇到
  • 你是对的,去掉&lt;script&gt;后它工作正常。
【解决方案2】:

您可以在需要在 javascript 中查看 $LANG 的文件中使用简单的脚本标记来实现。

1) 创建一个与 $LANG 的 javascript 表示相呼应的 php 文件 - 我们称之为 lang.php 它应该做类似的事情

echo 'var english ="' . $LANG['value_1']  "';";

2) 将此文件包含在您的 html 中,然后您可以将变量 English 等用作普通的 javascript 变量。

<script language="javascript" src="http://whatever.com/lang.php"> </script>

【讨论】:

  • 在原始帖子中查看我的编辑。我添加了更多信息。
  • 删除 lang.php 中的
  • 你是对的,删除 &lt;script&gt; 就行了。
【解决方案3】:

试试:

<script ...>
var mydata = <?=json_encode($LANG)?>;
</script>

json_encode 返回一个包含 JSON 表示的字符串。 http://php.net/manual/en/function.json-encode.php

【讨论】:

  • 为我工作,&lt;script type="text/javasacript"&gt;
  • 在原始帖子中查看我的编辑。我添加了更多信息。
【解决方案4】:

我认为正确的做法是:

var foo = "<? echo $LANG['bar']; ?>";

你用js代码写的php代码越少越好,越干净。

【讨论】:

  • 无法在 .js 文件中运行 php 代码
  • 如果你尝试使用 php 作为 javascript 生成引擎,你需要包含一个 php 文件而不是真正的 js 文件,比如 foobar.js.php,这是 symfony2 框架中处理文件的方式.
【解决方案5】:

您可以创建一个 PHP 文件:

<?php
header('Content-Type: text/javascript');
echo 'var lang = {};';
foreach ($LANG as $key => $value) {
    echo "lang['$key'] = '" . addslashes($value) . "';";
}
?>

然后链接脚本就可以使用lang对象了:

<script type='text/javascript' src='/path/to/lang.php'></script>
<script type='text/javascript'>
alert(lang.value_1);
</script>

【讨论】:

  • 谢谢@Rapidwolf - 我目前基本上正在尝试这个。将其他 cmet 的碎片放在一起,基本上就得出了你所拥有的。马上试试。
  • 在原始帖子中查看我的编辑。我添加了更多信息。
【解决方案6】:

删除&lt;script&gt;&lt;/script&gt; 标记,这些标记在链接为text/javascript 文件时可能会导致语法错误。

【讨论】:

  • 谢谢 - 正是问题所在。现在工作!!!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2011-05-16
  • 2015-05-11
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多