Pasando un valor de PHP para JavaScript [duplicado]
-
23-08-2019 - |
Pregunta
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo pasar variables y datos desde PHP a JavaScript? 19 respuestas
Tengo código PHP como en el siguiente.
<?php
echo "<SCRIPT LANGUAGE='javascript'>add dd_Employee('".$id1."','".$fname1."',".$sal1.");</SCRIPT>";
echo "<SCRIPT LANGUAGE='javascript'>add dd_Employee('".$id2."','".$fname2."',".$sal2.");</SCRIPT>";
....
?>
...
Y mi código JavaScript contiene
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);
}
Ahora el problema es que sea asignado por el PHP visble sólo en AddEmployee
. Lo que significa que está funcionando bien. Pero dentro displayEmployee
el valor asignado por PHP no funcionará. ¿Hay alguna falla en mi lógica?
Solución
Sólo rellenar la estructura global de datos directamente en lugar de pasarla a través de una función de JavaScript. Es probable que esté ejecutando en un problema de alcance variable, ya que se están asignando memoria en addEmployee.
Ejemplo:
<?php
print "details[details.length] = new Array('$id1', '$name1', '$salary1');\n";
?>
Otros consejos
Parece que se está perdiendo algunas llaves en su bucle. En este momento, usted tiene un bucle for
1-línea que no hace más que asignar un valor a la variable de temperatura, que se re-declarada en cada iteración. No puedo recordar lo que las reglas de alcance son JavaScript en esta situación, pero es generalmente una mala práctica de hacer esto (si es intencional). Pruebe algo como esto para su método 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);
}
}
Esto debería solucionar el problema inmediato. Si usted tiene control sobre todo el código, te recomiendo convertir los datos de los empleados en un objeto por lo que es más manejable. Para ello, se debe utilizar el código 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>';
?>
Y a continuación, modificar su código JavaScript a tener este aspecto:
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);
}
}
No he probado este código, pero debería funcionar.
Usted tiene un error en su llamada JavaScript generado por PHP
echo "<SCRIPT LANGUAGE='javascript'>add dd_Employee('".$id1."','".$fname1."',".$sal1.");</SCRIPT>";
debería ser
echo "<SCRIPT LANGUAGE='javascript'>addEmployee('".$id1."','".$fname1."',".$sal1.");</SCRIPT>";
Y si desea cambiar a la 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>
La entrada de blog Valor Cambio de la página de JavaScript / HTML a PHP y de la página PHP tener JavaScript puede ser útil para algunos.