尽管有各种消息来源,但我无法让它发挥作用。我尝试以下方法:
<?php
$list_array = array();
foreach ($this->resultatTypeMail as $mailType) {
$nom = $mailType->getNom();
$objet = $mailType->getObjet();
$list_array[] = array(
'Name' => $nom,
'Object' => $objet,
);
echo "<script type='text/javascript'>alert('$nom');</script>"; // this is OK
echo "<script type='text/javascript'>alert('$objet');</script>"; // this is OK
}
?>
<script type="text/javascript">
var js_array = [<?php echo json_encode( $list_array ); ?>];
alert(js_array[0]); // This returns undefined
</script>
当我提醒他们时,我在$nom
和$objet
上获得了令人满意的结果。
问题:
js_array[0]
返回undefined
请注意,我不是UTF-8。我不确定它是否相关。
编辑:我的目标是获得一系列可在JS中使用的自定义php对象。答案 0 :(得分:1)
在PHP中,当使用json_encode解析时,具有字符串键的数组将转换为对象。
您可以使用array_keys强制创建数组,也可以在javascript中使用对象表示法
<?php
$list_array = array();
foreach ($this->resultatTypeMail as $mailType) {
$nom = $mailType->getNom();
$objet = $mailType->getObjet();
$list_array[] = array(
'Name' => $nom,
'Object' => $objet,
);
echo "<script type='text/javascript'>alert('$nom');</script>"; // this is OK
echo "<script type='text/javascript'>alert('$objet');</script>"; // this is OK
}
<script type="text/javascript">
var js_array = [<?php echo json_encode( array_values($list_array) ); ?>];
alert(js_array[0]);
</script>
或者
<?php
$list_array = array();
foreach ($this->resultatTypeMail as $mailType) {
$nom = $mailType->getNom();
$objet = $mailType->getObjet();
$list_array[] = array(
'Name' => $nom,
'Object' => $objet,
);
echo "<script type='text/javascript'>alert('$nom');</script>"; // this is OK
echo "<script type='text/javascript'>alert('$objet');</script>"; // this is OK
}
<script type="text/javascript">
var js_array = [<?php echo json_encode( array_values($list_array) ); ?>];
alert(js_array.Name);
</script>
答案 1 :(得分:1)
我认为您有多个问题:您在;
行之后错过json_encode()
(实际上并不需要);你用括号围绕json_encode()
的结果(这应该有效但我希望它不是你想要的);最重要的是,在打印JS之前,你错过了关闭的PHP ?>
标签......
这对我有用:
<?php
// your PHP code here...
?>
<script type="text/javascript">
var js_array = <?php echo json_encode($list_array); ?>;
alert(js_array[0]); // This works for me!
</script>
看起来问题可能出现在您所说的编码中 - 似乎json_encode
仅适用于UTF-8!来自json_encode()
docs:
所有字符串数据必须采用UTF-8编码。
所以我认为在将字符串放入数组之前必须将字符串转换为UTF-8,例如:
$list_array[] = array(
'Name' => utf8_encode($nom),
'Object' => utf8_encode($objet),
);
我认为只是应该有效 - 否则你可以从同一json_encode()
文档中的评论中尝试this;或this其他问题以获得更多想法......
答案 2 :(得分:1)
只需从var js_array =
行中移除[],它就会起作用:
<强>错强>:
var js_array = [<?php echo json_encode( array_values($list_array) ); ?>];
从右强>:
var js_array = <?php echo json_encode( array_values($list_array) ); ?>;
工作代码:
<?php
class MailType {
function __construct($n, $o) {
$this->nom = $n;
$this->objet = $o;
}
private $nom;
private $objet;
public function getNom() {
return $this->nom;
}
public function getObjet() {
return $this->objet;
}
}
$list_array = array();
$resultatTypeMail = array(new MailType('John', 'obj1'), new MailType('Mary', 'obj2'));
foreach ($resultatTypeMail as $mailType) {
$nom = $mailType->getNom();
$objet = $mailType->getObjet();
$list_array[] = array(
'Name' => $nom,
'Object' => $objet,
);
//echo "<script type='text/javascript'>alert('$nom');</script>"; // this is OK
//echo "<script type='text/javascript'>alert('$objet');</script>"; // this is OK
}
?>
<script type="text/javascript">
var js_array = <?php echo json_encode( $list_array ) ?>;
alert(js_array[0].Name); // This returns John
</script>
您可以在此处看到它:http://phpfiddle.org/main/code/5xei-ybpn
(按F9或点击'Run - F9'运行)