JavaScript PHP bir değer geçirerek

4 Cevap php

Ben aşağıda olduğu gibi PHP kodu var.

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

?>
...

Ve benim JavaScript kodu içeren

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

Şimdi sorun ne olursa olsun, PHP tarafından atanmış yalnızca AddEmployee olarak visble olacaktır. Hangisi iyi çalışıyor demektir. Ama içerde displayEmployee PHP tarafından atanan değeri çalışmaz. Benim mantık herhangi bir kusur var mı?

4 Cevap

Sadece küresel veri yapısını doldurmak doğrudan ziyade bir JavaScript işlevi geçirilerek. Eğer AddEmployee bellek tahsis edilir beri olasılıkla bir değişken kapsamı sorun haline yayınlanıyor.

Örnek:

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

Eğer döngü için bazı küme parantezi eksik gibi görünüyor. Şu anda, hiçbir şey yok ama her tekrarında yeniden ilan edilir temp değişkeni, bir değer atamak 1-line for döngü var. Ben kapsam kuralları, bu durumda JavaScript için ne hatırlayamıyorum, ancak (kasıtlı ise) bunu yapmak için genellikle kötü bir uygulamadır. Lütfen displayEmployee() yöntemi için böyle bir şey deneyin.

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

Bu sizin acil sorunu düzeltmek gerekir. Eğer tüm kod üzerinde kontrol varsa, ben daha yönetilebilir yani bir nesnenin içine çalışan veri dönüm tavsiye ederim. Bunu yapmak için, bu PHP kodu kullanmanız gerekir:

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

Ve sonra bu gibi bakmak için JavaScript kodu değiştirmek:

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

Ben bu kodu test değil, ama çalıştırmak gerekir.

Eğer PHP tarafından oluşturulan JavaScript çağrısı bir hata var

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

olmalıdır

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

Ve sen OOP bunu değiştirmek isterseniz?

<?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>