当脚本使用PHP变量时导出javascript
Export javascript when the script is using PHP variables
我在一个站点的php脚本中有800行JS代码,并且在一些JS函数中散落着一些php回声来插入php中的变量。我想要尽可能多的JS出的页面,但我不知道任何好的方法来做到这一点,因为我不是很有经验的JS,因为我没有写代码,我甚至不知道这个东西的100%的原因。
这里有一个最糟糕的例子,我不知道如何从PHP页面中转换出来。
function validateCostCenter(el){
var objCB = el;
var emp_code = objCB.name.substring(23,29);
var local_plant_ID ="<?=$plant['Plant']['LocationID']?>";
var cc_plants_array = ["<?=$cc_plants?>"];
var CCPlant=false;
var CostCenterExists=false;
var std_cs_array = [];
<?
$idx = 0;
foreach($employees as $emp){
foreach($std_cs as $cs){
if($emp['Emp']['id'] == $cs[0]['emp_id']){
echo "std_cs_array[".$idx."] = ['"".trim($emp['Emp']['code'])."'",'"".$cs['0']['emp_id']."'",'"".$cs['0']['locationid']."'",'"".$cs['0']['charge_back_plant_id']."'"];'n";
$idx++;
}
}
}
?>
要做到这一点,最好的方法是从页面中删除所有的纯JS函数,并包括它们作为一个外部文件,只是离开部分php的100%是吗?这是我们网站上最浪费和最慢的页面之一,所以我希望它尽可能优化,并且单独的java脚本文件使一切更容易调试。添加所有php生成的变量作为函数的参数:
function validateCostCenter(el, local_plan_ID, cc_plants_array, std_cs_array)
BTW你可以使用json_encode
来导出你的$employers
数组到javascript。
我将用一个非常简单的例子来说明可能的方法。
方法1:PHP
page.php包含计算和生成的Javascript文件(就像您现在拥有的那样):<body>
<?php
function sum_php($a) {
$sum = 0;
for ($i = 0; $i < count($a); ++$i) $sum += $a[$i];
return $sum;
}
$a = array(1, 2, 3);
$sum = sum_php($a);
?>
<script type="text/javascript">
// JS generated by PHP:
alert("sum_php=" + <?php echo $sum ?>);
</script>
</body>
方法2:Javascript中的计算
计算将从PHP移到单独的Javascript文件page.js中。PHP通过JSON-encoding:
向JS函数提供变量。(1) page.php:
<head>
<script type="text/javascript" src="page.js"> </script>
</head>
<body>
<?php
$a = array(1, 2, 3);
?>
<script type="text/javascript">
sum_js(<?php echo json_encode($a) ?>); // supply $a to JS function
</script>
</body>
(2) page.js:
function sum_js(a) {
var s = 0;
for (var i = 0; i < a.length; ++i) s += a[i];
alert("sum_js=" + s);
return s;
}
假设这些值是不可缓存的....
如果是我,我会让PHP创建一个全局对象/数组来保存这些值,并生成不可缓存的javascript文件,然后将其余代码移动到一个静态的,可缓存的文件中,例如
user_vars.php:
<?php
session_start();
....get values for variables....
print "user_vars={";
print " ' plant': " . json_encode($plant) . "'n";
print " ', cc_plants_array: [" . $cc_plants . "]'n";
....etc
generic.js:
function validateCostCenter(el){
var objCB = el;
var emp_code = objCB.name.substring(23,29);
var local_plant_ID = user_var.Plant.LocationID;
var cc_plants_array = user_var.cc_plants_array;
.....
然而,对每个参数的生成值进行拆分可能有点棘手——最简单的方法可能是在PHP生成基本HTML时编写一个临时文件,而不是尝试创建两次数据结构。
相关文章:
- 将函数的上下文应用于javascript变量
- 如何通过ajax刷新JSF填充的javascript变量
- Javascript变量赋值|
- 限制javascript变量的最小/最大整数
- 来自文本输入null的html javascript变量
- 访问jsrender模板中的全局javascript变量并更新它
- 从数据库中获取数据并插入JavaScript变量
- 如何将javascript变量传递到Meteor Spacebars模板中
- 将JavaScript变量保存到Rails模型
- 在if语句下的html中使用javascript变量
- Javascript变量分配-按类别
- 操作javascript变量[HTML]以只显示文本
- 无法比较javascript变量
- 如何将smarty变量与javascript变量进行比较
- 如何使用PHP将javascript变量添加到mysql数据库中
- Javascript 变量使用 jquery 查找变量
- 重新加载页面时Javascript变量发生变化
- 在asp classic中使用javascript变量
- 全局Javascript变量变为null
- 如何向服务器端提交javascript变量