2011-08-15 2 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 %를 떠날 수 있을까요 뭐야? 이것은 사이트에서 가장 낭비적이고 느린 페이지 중 하나이므로 가능한 한 최적화되도록하고 별도의 자바 스크립트 파일을 사용하면 모든 것을 디버그하기가 더 쉬워집니다.

+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) 

가 BTW 당신이 자바 스크립트에 $employers 배열을 내보낼 json_encode를 사용할 수 있습니다.

이 값이 비 캐시입니다
0

Assumiong 것을 ....

만약 그랬다면, 난은 PHP가 값을 포함하는 전역 객체/배열을 만들 수 있고, 자바 스크립트 파일이 아닌 캐시를 생성하는 것, 나머지 코드를 캐시 가능한 정적 파일로 옮깁니다.

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을 생성으로 임시 파일을 쓰기보다는 두 배의 데이터 구조를 만들려고 할 수 있습니다.

1

아주 간단한 예제에서 가능한 접근법을 설명 할 것입니다.

접근 1 : PHP에서 계산page.php가 계산 및 생성 된 자바 스크립트 파일 (당신이 지금 가지고있는)를 포함

:

<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.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; 
} 
관련 문제