Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Tengo código PHP como en el siguiente.

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

?>
...

Y mi código JavaScript contiene

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

Ahora el problema es que sea asignado por el PHP visble sólo en AddEmployee. Lo que significa que está funcionando bien. Pero dentro displayEmployee el valor asignado por PHP no funcionará. ¿Hay alguna falla en mi lógica?

¿Fue útil?

Solución

Sólo rellenar la estructura global de datos directamente en lugar de pasarla a través de una función de JavaScript. Es probable que esté ejecutando en un problema de alcance variable, ya que se están asignando memoria en addEmployee.

Ejemplo:

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

Otros consejos

Parece que se está perdiendo algunas llaves en su bucle. En este momento, usted tiene un bucle for 1-línea que no hace más que asignar un valor a la variable de temperatura, que se re-declarada en cada iteración. No puedo recordar lo que las reglas de alcance son JavaScript en esta situación, pero es generalmente una mala práctica de hacer esto (si es intencional). Pruebe algo como esto para su método 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);
    }
}

Esto debería solucionar el problema inmediato. Si usted tiene control sobre todo el código, te recomiendo convertir los datos de los empleados en un objeto por lo que es más manejable. Para ello, se debe utilizar el código 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>';
?>

Y a continuación, modificar su código JavaScript a tener este aspecto:

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

No he probado este código, pero debería funcionar.

Usted tiene un error en su llamada JavaScript generado por PHP

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

debería ser

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

Y si desea cambiar a la POO?

<?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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top