2008-12-25 302 views
1

我的PHP代碼如下所示。將值從PHP傳遞到JavaScript

<?php 
    echo "<SCRIPT LANGUAGE='javascript'>add dd_Employee('".$id1."','".$fname1."',".$sal1.");</SCRIPT>"; 
    echo "<SCRIPT LANGUAGE='javascript'>add dd_Employee('".$id2."','".$fname2."',".$sal2.");</SCRIPT>"; 
    .... 

?> 
... 

而且我的JavaScript代碼包含

var details=new Array(); 

function addEmployee(id,fname,salary){ 
    var temp=new Array(id,fname,salary); 
    details[details.length]=temp; 
    alert(temp); 
} 

function displayEmployee(){ 
    for (var i=0;i<details.length;i++) 
     var temp_details=details[i]; 

    //Display the id,name,sal 
    var id=temp_details[0]; 
    var name=temp_details[1]; 
    var sal=temp_details[2]; 

    alert(id); 
    alert(name); 
    alert(sal); 
} 

現在的問題是不管用PHP分配將visble只在AddEmployee。這意味着它工作正常。但在displayEmployee內部,PHP分配的值不起作用。我的邏輯中是否有缺陷?

回答

6

只需直接填充全局數據結構,而不是通過JavaScript函數傳遞它。由於您在addEmployee中分配內存,因此很可能會遇到變量範圍問題。

例子:

<?php 
print "details[details.length] = new Array('$id1', '$name1', '$salary1');\n"; 
?> 
1

它看起來就像你在你的for循環缺少一些大括號內。現在,你有一行一行for循環,它什麼都不做,只爲你的臨時變量賦值,在每次迭代時重新聲明它。我不記得在這種情況下JavaScript的範圍規則是什麼,但這樣做通常是不好的做法(如果它是故意的)。嘗試使用displayEmployee()方法。

function displayEmployee(){ 
    for(var i=0; i<details.length; i++) { 

     var temp_details = details[i]; 

     //Display the id, name, and sal. 
     var id = temp_details[0]; 
     var name = temp_details[1]; 
     var sal = temp_details[2]; 

     alert(id); 
     alert(name); 
     alert(sal); 
    } 
} 

這應該解決您的直接問題。如果您可以控制所有代碼,我建議將員工數據轉換爲對象,以便更易於管理。要做到這一點,你應該使用這個PHP代碼:

<?php 
    echo '<script> 
       addEmployee('.json_encode(array(
        'id'  => 'id1', 
        'name' => 'fname1', 
        'salary' => 1024, 
      )).'); 
       addEmployee('.json_encode(array(
        'id'  => 'id2', 
        'name' => 'fname2', 
        'salary' => 2048, 
      )).'); 
     </script>'; 
?> 

然後改變你的JavaScript代碼如下所示:

var details = []; 

function addEmployee(employeeObj){ 
    details[details.length] = employeeObj; 

    alert(employeeObj); 
} 
function displayEmployee(){ 
    for(var i=0; i<details.length; i++) { 
     alert(details[i].id); 
     alert(details[i].name); 
     alert(details[i].salary); 
    } 
} 

我沒有測試此代碼,但它應該運行。

1

您的JavaScript調用PHP支持

產生錯誤
echo "<SCRIPT LANGUAGE='javascript'>add dd_Employee('".$id1."','".$fname1."',".$sal1.");</SCRIPT>"; 

應該

echo "<SCRIPT LANGUAGE='javascript'>addEmployee('".$id1."','".$fname1."',".$sal1.");</SCRIPT>"; 

如果你想改變它OOP?

<?php 
    $employeeList[] = array('sdf3434', 'Bob', 123.34); 
    $employeeList[] = array('wer335dg', 'Joe', 223); 
?> 
<html> 
    <head> 
     <script> 
      function Employees() { 
       this.list = new Array(); 
      } 
      Employees.prototype.add = function (id, fname, sal) { 
       this.list.push(new Array(id, fname, sal)); 
      }; 
      Employees.prototype.display = function() { 
       for(var i=0, t = this.list.length;i<t;i++) { 
        var emp = this.list[i]; 
        alert(emp[0]); 
        alert(emp[1]); 
        alert(emp[2]); 
       } 
      }; 
      var employees = new Employees(); 
      <?php 
       foreach ($employeeList as $employee) { 
        list($id, $fname, $sal) = $employee; 
        printf("employees.add('%s', '%s', %f);\n", $id, $fname, $sal); 
       } 
      ?> 
     </script> 
    </head> 
    <body> 
     <a href="#" onclick="employees.display();">click</a> 
    </body> 
</html>