我会将两个php变量从一个codeigniter控制器传递给位于我视图头部的javascript函数。可以这样做吗?
答案 0 :(得分:4)
是的,请回复javascript:<?php echo '<script>var myPhpVariable = "'. $my_var . '";</script>'; ?>
答案 1 :(得分:1)
或只是在控制器中设置变量
例如 - 在控制器中
$data['newvar'] = $myvar_in_the_controller;
然后在javascript的视图中
<?php echo $newvar ?>
答案 2 :(得分:0)
我一直在开发一个页面,该页面需要将大量php数据移植到客户端。
我更喜欢编写DRY代码,并寻求一种更好的方式来编写脚本,而不是一行一行地声明JavaScript。
不幸的是,我不得不打破我的高级编码原则之一:永远不要使用变量变量。”我不认可变量变量的原因是:
在后续技术中,我将展示如何以DRY方式提供各个javascript声明。在这种情况下,我可以容忍使用变量变量,因为可以清楚地知道要处理的变量名称,并且不使用任何数组函数。出于记录,我从未认可使用extract()
,也从未有充分的理由在我的任何项目中使用它。 (我仅使用extract()
来模拟CI行为。)
PHP:(Demo)
// 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对象,然后仅从该结构中访问值。但是,这些年来,我采用了一个非常繁重的项目,该项目已经由许多不同的开发人员处理。除了重构模板模板并冒着破坏某些东西的风险,我将以上内容用作临时的改进,直到提供正确的重写脚本为止。