Passando un valore da PHP a JavaScript [duplicato]
-
23-08-2019 - |
Domanda
Questa domanda ha già una risposta qui:
Non ho il codice PHP come di seguito.
<?php
echo "<SCRIPT LANGUAGE='javascript'>add dd_Employee('".$id1."','".$fname1."',".$sal1.");</SCRIPT>";
echo "<SCRIPT LANGUAGE='javascript'>add dd_Employee('".$id2."','".$fname2."',".$sal2.");</SCRIPT>";
....
?>
...
E il mio codice 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);
}
Ora il problema è tutto quello assegnato dal PHP visble solo in AddEmployee
. Il che significa che sta funzionando benissimo. Ma dentro displayEmployee
il valore assegnato da PHP non funzionerà. C'è qualche difetto nella mia logica?
Soluzione
Basta compilare la struttura globale dei dati direttamente, piuttosto che passare attraverso una funzione JavaScript. È probabile che esegue in un problema di portata variabile dal momento che sono l'allocazione della memoria in addEmployee.
Esempio:
<?php
print "details[details.length] = new Array('$id1', '$name1', '$salary1');\n";
?>
Altri suggerimenti
Sembra che vi state perdendo alcune parentesi graffe nel ciclo for. In questo momento, hai un ciclo for
1-linea che non fa altro che assegnare un valore per la variabile temporanea, che viene ri-dichiarata su ogni iterazione. Non riesco a ricordare quali sono le regole di visibilità sono per JavaScript in questa situazione, ma è generalmente cattiva pratica per fare questo (se è intenzionale). Provare qualcosa di simile per il metodo 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);
}
}
Questo dovrebbe risolvere il problema immediato. Se hai il controllo su tutto il codice, mi consiglia di trasformare i dati dei dipendenti in un oggetto in modo che sia più gestibile. Per fare questo, è necessario utilizzare questo codice 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>';
?>
E poi modificare il vostro codice JavaScript per assomigliare a questo:
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);
}
}
Non ho ancora testato questo codice, ma dovrebbe funzionare.
Hai un errore nella vostra chiamata JavaScript generato da PHP
echo "<SCRIPT LANGUAGE='javascript'>add dd_Employee('".$id1."','".$fname1."',".$sal1.");</SCRIPT>";
dovrebbe essere
echo "<SCRIPT LANGUAGE='javascript'>addEmployee('".$id1."','".$fname1."',".$sal1.");</SCRIPT>";
E se si vuole cambiare per 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>
Il post sul blog Valore Exchange dalla pagina JavaScript / HTML a PHP e da pagina PHP a JavaScript può essere utile per alcuni.