2017-03-09 48 views
1

尽管有所有来源,但仍无法使其工作。我尝试以下方法:将PHP数组转换为JS数组(ISO 8859-1字符)

<?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。我不确定它是相关的。

编辑:我的目标的大图是获得一个自定义的php objet数组在JS中可用。

+1

取代VAR js_array = [] ; var js_array = [<?php echo json_encode($ list_array); ?>]; 和检查 – rahulsm

+0

我相信json_encode将字符串值作为数组键的数组编码为JSON对象而不是数组。 –

+0

@rahul_m好点但仍然是相同的错误'undefined' –

回答

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键或单击 '运行 - F9' 运行)

+0

我说,我的回答似乎并没有为OP工作...另外,'[]'不_wrong_和'alert'应该与他们反正工作... – MikO

+1

@MikO对不起我以前的评论,我混淆了答案。 –

+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> 
+0

因为OP已经用括号'[]'包围了JSON,所以结果应该是只包含1个项目并且包含整个JSON字符串的数组,这可能不是OP想要的,但是alert(js_array [0] )''应该不需要'array_values'或任何东西...我不认为这是解决方案... – MikO

+0

我仍然'两个解决方案'取得'undefined':/ –

+0

我在这里测试你的代码,你有3错误:您在两个版本中都忘记了关闭?>标记,而第二个版本仍然提示未定义。 –

1

我认为你有多个问题:你是在json_encode()行之后缺少;(这实际上并不需要);你用括号括起了json_encode()的结果(这应该可以工作,但我希望它不是你想要的);而最重要的是,你错过闭幕PHP打印JS之前?>标签...

这个工作对我来说:

<?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其他问题获得更多的想法...

+0

之前?>;是可选的 –

+0

我根据你的明智点编辑,但仍然'undefined'对我来说 –

+0

是真的!它已经很长时间了,因为我不工作在一个普通的PHP脚本,我不记得上次我使用了一个结束标记:) – MikO