2011-08-15 6 views
1

サイトのPHPスクリプトの中に800行のJSコードがあり、JS関数のいくつかにはPHPの変数を挿入するためのPHPエコーがあります。私はできるだけページからJSの多くを欲しがっていますが、私はJSであまり期限切れではないし、コードを書かなかったので、そうする良い方法はわかりませんこのようなものの100%の理由を知っています。スクリプトがPHP変数を使用しているときにjavascriptをエクスポート

ここでは、最悪の犯罪者の例と私は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%のままにすることですありますか?これは私たちのサイトで最も無駄で低速なページの1つです。できるだけ最適化したいと思います。別のJavaスクリプトファイルを使用すると、デバッグが簡単になります。

+0

何がありますJSファイル全体をPHPスクリプトで生成できない理由あなたがしようとすることができるのは、すべてのjsを別々のファイルに移動し、そのファイルに.php拡張子を付けることです。そのPHPの中では、 'header( 'Content-type:text/javascript');で始まります。 - あなたのjs全体が別のファイルに存在するようになりました。メインファイルに ''があります。もちろん、変数にどのようにデータが取り込まれるかを並べ替える必要があります。 –

+0

これらの変数の内容を別々のAjaxリクエストとして取得することはできますか? – blottedscience

+0

私はそれらを別々にしたいのですが、私はHTML出力を小さくしようとしていて、JSを壊しました。 JSが100%有効ではないことが判明し、問題を分離することは難しいですが、一般的にはサイトを可能な限りモジュール化しておく方がよいでしょう。クライアントがキャッシュできない余分な800行以上もあり、このページはパフォーマンス上の問題です。別のページを "PHP" jsファイルにするのは興味深いアプローチです。キャッシュ可能な問題を修正するわけではありませんが、動作させることができるかどうかを確認します。今のところ私はファイルにPHPコードなしのビットを分離しようとしています。 –

答えて

1

あなたの関数のパラメータとして、これらすべてのphp-生成された変数を追加します。

function validateCostCenter(el, local_plan_ID, cc_plants_array, std_cs_array) 

ところであなたはJavaScriptにあなたの$employers配列をエクスポートするjson_encodeを使用することができます。

0

これらの値は、非キャッシュ可能であることをAssumiong ....

それは私だったら、私は、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; 
..... 

しかし、各パラメータの生成された値がどうなるかunpickingのは少しトリッキーなことができます - 最も簡単な方法は、PHPベースのHTMLを生成して一時ファイルを作成するのではなく2倍のデータ構造を作成しようとするかもしれません。

1

非常に簡単な例で、考えられるアプローチを示します。

アプローチ1:

<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:計算PHPで計算

page.phpを計算して生成されるJavaScriptファイルを(あなたは今それを持っているように)含まれてい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> 

(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; 
}