Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich habe PHP-Code, wie im Folgenden.

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

?>
...

Und mein JavaScript-Code enthält

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

Jetzt ist das Problem, was auch immer von der PHP zugewiesen wird visble nur in AddEmployee. Das heißt, es funktioniert gut. Aber innerhalb displayEmployee den von PHP zugewiesenen Wert wird nicht funktionieren. Gibt es einen Fehler in meiner Logik?

War es hilfreich?

Lösung

füllen Sie Ihre globale Datenstruktur direkt, anstatt sie über eine JavaScript-Funktion übergeben. Sie sind wahrscheinlich in einem variablen Umfang Problem laufen, da Sie Speicher in addEmployee werden zugewiesen wird.

Beispiel:

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

Andere Tipps

Es sieht aus wie Sie einige geschweiften Klammern in Ihrer for-Schleife sind vermisst. Gerade jetzt, Sie haben eine 1-zeiliges for Schleife, die nichts tut, sondern um einen Wert zu Ihrem temporären Variablen zuweisen, die bei jeder Iteration neu deklariert wird. Ich kann mich nicht daran erinnern, was die Bereichsregeln sind für JavaScript in dieser Situation, aber es ist im Allgemeinen schlechte Praxis, dies zu tun (wenn es absichtlich). Versuchen Sie so etwas für Ihre displayEmployee() Methode.

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

Das sollte Ihr unmittelbares Problem beheben. Wenn Sie die Kontrolle über den gesamten Code haben, würde ich empfehlen, die Mitarbeiterdaten in ein Objekt drehen, damit es besser handhabbar ist. Um dies zu tun, sollten Sie diesen PHP-Code verwenden:

<?php
    echo '<script>
              addEmployee('.json_encode(array(
                  'id'     => 'id1',
                  'name'   => 'fname1',
                  'salary' => 1024,
              )).');
              addEmployee('.json_encode(array(
                  'id'     => 'id2',
                  'name'   => 'fname2',
                  'salary' => 2048,
              )).');
         </script>';
?>

Und dann ändern Sie Ihre JavaScript-Code wie folgt aussehen:

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

Ich habe diesen Code nicht getestet, aber es sollte ausgeführt werden.

Sie haben einen Fehler in der JavaScript-Aufruf erzeugt durch PHP

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

sollte

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

Und wenn Sie wollen, es zu ändern, um 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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top