Domanda

    

Questa domanda ha già una risposta qui:

         

Non ho il codice PHP come di seguito.

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

?>
...

E il mio codice 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);
}

Ora il problema è tutto quello assegnato dal PHP visble solo in AddEmployee. Il che significa che sta funzionando benissimo. Ma dentro displayEmployee il valore assegnato da PHP non funzionerà. C'è qualche difetto nella mia logica?

È stato utile?

Soluzione

Basta compilare la struttura globale dei dati direttamente, piuttosto che passare attraverso una funzione JavaScript. È probabile che esegue in un problema di portata variabile dal momento che sono l'allocazione della memoria in addEmployee.

Esempio:

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

Altri suggerimenti

Sembra che vi state perdendo alcune parentesi graffe nel ciclo for. In questo momento, hai un ciclo for 1-linea che non fa altro che assegnare un valore per la variabile temporanea, che viene ri-dichiarata su ogni iterazione. Non riesco a ricordare quali sono le regole di visibilità sono per JavaScript in questa situazione, ma è generalmente cattiva pratica per fare questo (se è intenzionale). Provare qualcosa di simile per il metodo 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);
    }
}

Questo dovrebbe risolvere il problema immediato. Se hai il controllo su tutto il codice, mi consiglia di trasformare i dati dei dipendenti in un oggetto in modo che sia più gestibile. Per fare questo, è necessario utilizzare questo codice 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>';
?>

E poi modificare il vostro codice JavaScript per assomigliare a questo:

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

Non ho ancora testato questo codice, ma dovrebbe funzionare.

Hai un errore nella vostra chiamata JavaScript generato da PHP

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

dovrebbe essere

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

E se si vuole cambiare per 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top