这个问题在这里已经有答案了:

我有如下 PHP 代码。

<?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 分配的任何内容都只能在 AddEmployee. 。这意味着它工作正常。但里面 displayEmployee PHP 分配的值将不起作用。我的逻辑有问题吗?

有帮助吗?

解决方案

只需直接填充全局数据结构,而不是通过 JavaScript 函数传递它。由于您在 addEmployee 中分配内存,因此您可能会遇到变量范围问题。

例子:

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

其他提示

看来您在 for 循环中缺少一些花括号。现在,你有 1 行 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);
    }
}

我还没有测试过这段代码,但它应该可以运行。

PHP 生成的 JavaScript 调用有错误

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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top