Le passage d'une valeur de PHP JavaScript [double]
-
23-08-2019 - |
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?
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>
Le blog Valeur Echange de la page JavaScript / HTML PHP et de la page PHP JavaScript peut être utile pour certains.