تمرير قيمة من PHP إلى جافا سكريبت [مكررة
-
23-08-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
لدي رمز 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>
بلوق بريد تبادل القيمة من صفحة JavaScript / HTML إلى PHP ومن صفحة PHP إلى JavaScript قد تكون مفيدة للبعض.