2008-12-25 115 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>