我会将两个 php 变量从 codeigniter 控制器传递给位于我的视图头部的 javascript 函数。有可能做这样的事情吗?
将 php 变量从控制器传递给视图头部的 javascript 函数
IT技术
php
javascript
codeigniter
2021-03-09 03:17:57
3个回答
是的,当然,只需回显 javascript: <?php echo '<script>var myPhpVariable = "'. $my_var . '";</script>'; ?>
或者只是在你的控制器中设置你的变量
例如 - 在控制器中
$data['newvar'] = $myvar_in_the_controller;
然后在javascript的视图中
<?php echo $newvar ?>
我一直在开发一个页面,需要将相当多的 php 数据移植到客户端。
我更喜欢编写 DRY 代码,并寻求一种更好的方式来编写脚本,而不是一行一行的 javascript 声明。
不幸的是,我不得不打破我的高级编码原则之一:永远不要使用可变变量”。我不认可可变变量的原因是:
- 他们更难让未来的脚本开发人员快速理解
- 他们无法享受数组函数
在接下来的技术中,我将展示如何以 DRY 方式提供单独的 javascript 声明。在这种情况下,我容忍使用可变变量,因为很清楚正在处理哪些变量名称并且不使用数组函数。郑重声明,我从不赞同在extract()
我的任何项目中使用它,也从来没有充分的理由使用它。(我只是extract()
用来模拟 CI 行为。)
PHP:(演示)
// declared in controller...
$data = [
'a' => -1.5,
'b' => false,
'c' => null,
'd' => 'stringy "string" thing',
'e' => range(3,10),
'f' => "0",
'g' => (object)['food' => 'bard'],
'h' => "not used",
];
// the CodeIgniter effect...
extract($data);
// in your view...
$portToJS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
echo "\n<script>\nlet ";
foreach ($portToJS as $i => $variable) {
echo (!$i ? '' : ",\n\t") , "{$variable} = " , json_encode(${$variable});
}
echo ";\n</script>";
输出:
<script>
let a = -1.5,
b = false,
c = null,
d = "stringy \"string\" thing",
e = [3,4,5,6,7,8,9,10],
f = "0",
g = {"food":"bard"};
</script>
对json_encode()
您的变量值来说这是一个好主意,这样您就不必费心引用或转义引号。
理想情况下,我更愿意传递单个json_encode
ed 对象,然后只访问该结构中的值。但是,我采用了一个非常繁重的项目,多年来,该项目已由许多不同的开发人员处理。与其重构一堆模板并冒着破坏某些东西的风险,我将上述内容用作临时改进,直到提供适当的重新编写脚本。