当脚本使用PHP变量时导出javascript

当脚本使用PHP变量时导出javascript,php,javascript,Php,Javascript,我在一个站点的php脚本中有800行JS代码,在一些JS函数中有一些php echo,用于插入php中的变量。我希望尽可能多的JS离开页面,但我不知道有什么好的方法可以做到这一点,因为我对JS不是很感兴趣,而且因为我没有编写代码,所以我甚至不知道100%使用这些东西的原因 下面是一个最严重的违规者的例子,我不知道如何从PHP页面中转换出来 function validateCostCenter(el){ var objCB = el; var emp_code = objCB.name.subs

我在一个站点的php脚本中有800行JS代码,在一些JS函数中有一些php echo,用于插入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++;
        }
    }
}
功能验证呼叫中心(el){
var-objCB=el;
var emp_code=objCB.name.substring(23,29);
var local_plant_ID=“”;
var cc_植物_数组=[“”];
var CCPlant=false;
var=false;
var std_cs_数组=[];


最好的方法是从页面中删除所有纯JS函数,并将它们作为外部文件包含,只保留部分php函数100%不变吗?这是我们网站上最浪费和最慢的页面之一,因此我希望它尽可能优化,单独的java脚本文件使一切都更容易调试.

将所有这些php生成的变量添加为函数的参数:

function validateCostCenter(el, local_plan_ID, cc_plants_array, std_cs_array)

顺便说一句,您可以使用
json\u encode
$employers
数组导出到javascript。

假设这些值不可缓存

如果是我,我会让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;
.....
user_vars.php:

我将用一个非常简单的例子来说明可能的方法

方法1:PHP计算

php页面包含计算和生成的Javascript文件(正如您现在看到的):


//PHP生成的JS:
警报(“sum_php=“+);
方法2:Javascript计算

计算从PHP移到单独的Javascript文件page.js中。PHP通过JSON编码向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>
function sum_js(a) {
    var s = 0;
    for (var i = 0; i < a.length; ++i) s += a[i];
    alert("sum_js=" + s);
    return s;
}

sum_js();//为js函数提供$a
(2)page.js:

<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>
function sum_js(a) {
    var s = 0;
    for (var i = 0; i < a.length; ++i) s += a[i];
    alert("sum_js=" + s);
    return s;
}
函数和(a){ var s=0; 对于(var i=0;i
PHP脚本没有理由不能生成整个JS文件。您可以尝试将所有JS移动到一个单独的文件中,并使该文件具有.PHP扩展名。在该PHP中,从
头('Content-type:text/javascript')开始现在,你的整个js可以放在一个单独的文件中。在主文件中,你将有
。当然,你需要整理变量是如何填充的。也许你可以将这些变量内容作为一个单独的ajax请求来获取?我希望它们分开的原因是我试图缩小HTML输出,结果破坏了js;结果是js不是100%有效,隔离问题很困难,一般来说,我宁愿让网站尽可能模块化。这也是一个额外的800多行客户端无法缓存,这个页面是一个性能问题。使单独的页面成为一个“PHP”js文件是一种有趣的方法,我会看看我是否能让它工作,尽管它不能解决无法缓存的问题。