Question

    

Cette question a déjà une réponse ici:

         

J'ai le code PHP comme dans ce qui suit.

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

?>
...

Et mon code JavaScript contient

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

Maintenant, le problème est tout affecté par le PHP sera visble que dans AddEmployee. Ce qui signifie qu'il fonctionne bien. Mais à l'intérieur displayEmployee la valeur attribuée par PHP ne fonctionnera pas. Y at-il défaut dans ma logique?

Était-ce utile?

La solution

Il suffit de remplir votre structure de données globale directement plutôt que de passer à travers une fonction JavaScript. Vous utilisez probablement un problème de portée des variables puisque vous allouez mémoire addEmployee.

Exemple:

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

Autres conseils

On dirait que vous manquez quelques accolades dans votre boucle. En ce moment, vous avez une boucle de 1 for ligne qui ne fait rien, mais attribuer une valeur à votre variable temporaire, qui est re-déclarée à chaque itération. Je ne me souviens pas de ce que les règles de portée sont pour JavaScript dans cette situation, mais il est généralement une mauvaise pratique de le faire (si elle est intentionnelle). Essayez quelque chose comme ceci pour votre méthode 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);
    }
}

Cela devrait résoudre votre problème immédiat. Si vous avez le contrôle sur l'ensemble de votre code, je vous recommande transformer les données des employés dans un objet il est donc plus facile à gérer. Pour ce faire, vous devez utiliser ce code 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>';
?>

Et puis modifier votre code JavaScript pour ressembler à ceci:

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

Je ne l'ai pas testé ce code, mais il devrait fonctionner.

Vous avez une erreur dans votre appel JavaScript généré par PHP

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

doit être

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

Et si vous voulez changer en 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top