可能重复:
What's the best way to pass a PHP variable to Javascript?
我必须做一个自动处理从PHP到JavaScript的变量的函数,它简单而安全。 目前存储在具有变量值的类变量数组中,然后想法是在Javascript中提取,但是很多疑问都会让我(技术上)最好的方法来做到这一点。
还有几个问题,尤其是当复杂移动到Javascript数组或带有重音符号,特殊符号或符号作为引号或单引号的字符串时,包括使用带有换行符和回车链的链接时函数json_decode的问题。 (你得到了无效的JSON,我不得不在PHP中做一个清理函数,以避免传递带有这些字符的变量,但有时我需要)
我在网上搜索了很多,而且我找到了很多答案,但没有一个终结说服,更多的是上述问题。
一个例子:
PHP方法(太简单了):
var JsVars;
public function saveJsVar($key, $value) {
$this->JsVars[$key] = $value; //Possible need to clean certain characters like /n /r
}
“javascript part”
<script>
var SistemVars = SistemVars || {};
<?php foreach ($JSVARS as $k => $var) { ?>
SistemVars.<?=$k?> = '' || '<?php echo $var ?>'; // Dont work with arrays only plain
<?php } ?>
</script>
另一种选择:
<script>
var SistemVars = SistemVars || {};
SistemVars = <?=json_encode($JSVARS)?> // Object, with plain and array BUT problems with certain characters.
</script>
它的想法是使用PHP(saveJsVar)来保存纯变量和数组,并在SistemVars对象中设置vars使用它来像alert(SistemVars.ParamOne);
根据您的经验,您认为最好的方法是什么?
答案 0 :(得分:1)
第二个选项是更好的方法,因为它使用foreach
循环进行保存。此外,json_encode是为此目的而制作的,所以为什么不使用它:)而且仅仅是FYI,不再使用PHP的<?= ...?>
短标签Are PHP short tags acceptable to use?
<script>
var SistemVars = SistemVars || {};
SistemVars = <?=json_encode($JSVARS)?> // Object, with plain and array BUT problems with certain characters.
</script>
答案 1 :(得分:0)
我喜欢使用隐藏的输入元素并使用jQuery来使用/访问它们的值。 这样做可以让你保持你的js干净 - 里面没有PHP代码。 如果要将所有JS代码导出到外部文件中 - 这就是方法。