سؤال

هذا السؤال لديه بالفعل إجابة هنا:

لدي رمز PHP كما في ما يلي.

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

?>
...

ويحتوي رمز جافا سكريبت

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

الآن المشكلة هي كل ما يعينه PHP سوف تظهر في AddEmployee. وبعد مما يعني أنها تعمل بشكل جيد. لكن في الداخل displayEmployee لن تعمل القيمة المعينة من قبل PHP. هل هناك أي عيب في منطقتي؟

هل كانت مفيدة؟

المحلول

فقط قم بملء بنية البيانات العالمية الخاصة بك مباشرة بدلا من اجتيازها من خلال وظيفة JavaScript. من المحتمل أن تكون على الأرجح مشكلة نطاق متغير لأنك تخصيص ذاكرة في الودا.

مثال:

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

نصائح أخرى

يبدو أنك تفتقد بعض الأقواس المجعد في حلقة الخاص بك. الآن، لديك سطر واحد for حلقة لا تفعل شيئا سوى تعيين قيمة إلى متغير مؤقت الخاص بك، والتي يتم إعادة الإعلان عن كل تكرار. لا أستطيع أن أتذكر ما هي قواعد النطاق ل JavaScript في هذه الحالة، ولكن من الممارسات السيئة عموما للقيام بذلك (إذا كان مقصلا). جرب شيئا من هذا القبيل 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);
    }
}

يجب أن إصلاح مشكلتك الفورية. إذا كنت تعاني من التحكم في جميع التعليمات البرمجية الخاصة بك، فسوف أوصي بتحويل بيانات الموظف إلى كائن حتى يكون أكثر قابلية للإدارة. للقيام بذلك، يجب عليك استخدام رمز 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>';
?>

ثم قم بتغيير رمز JavaScript الخاص بك لتبدو كهذا:

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

لم أختبر هذا الرمز، ولكن يجب تشغيله.

لديك خطأ في مكالمة JavaScript التي تم إنشاؤها بواسطة PHP

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

يجب ان يكون

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

وإذا كنت ترغب في تغييره إلى 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top