2011-06-15 30 views
0

我是新来的JS & JSON.I很难将JSON数组转换为JavaScript数组。如何做到这一点?这里是我的代码:JavaScript和JSON

var data = { 
items: [ 
<? $i=1; foreach($query->result() as $row){ ?> 
<? if($i!=1){ ?>,<? } ?> 
{label: '<?=$row->district_name;?>', data: <?=$row->countid;?>} 
<? $i++; } ?> 
] 
}; 

如何获取JSON数组值到JavaScript Array。 我只是试过,但它不起作用。请提出一些建议。 这里是我的javascript数组

for(i=0;i<5;i++){ 
chartData[i]=data.items[i].label+";"+data.items[i].data; 

} 
+5

强制性阅读:[没有这样的事情作为“JSON对象”](http://benalman.com/news/2010/03/theres-no -such - 事物 - 作为一种JSON /)。还有一件事:你知道第一段代码是做什么的吗?不要告诉我你不必考虑它。这就是为什么人们不应该这样混用PHP和客户端代码。 – 2011-06-15 12:01:18

+1

如果你可以多说一些“不起作用”的话,这将会很有帮助。“ – Pointy 2011-06-15 12:02:04

+0

不要忘了如何将PHP数组转换为JSON – 2011-06-15 12:02:17

回答

1

正如别人已经说过,谈到JavaScript和JSON时要小心。你实际上想创建一个JavaScript对象而不是JSON。

不要混合PHP和JavaScript这样的。保持可怕是很可怕的。创建一个数组事前,它编码为JSON *和打印:

<?php 

    $results = $query->result(); // get results 

    function m($v) { // a helper function for `array_map` 
     return array('label' => $v->district_name, 
        'data' => $v->countid); 
    } 

    $data = array('items' => array_map('m', $results)); 

?> 

var data = <?php echo json_encode($data); ?> 

*:在这里我们使用的事实,JSON字符串是有效的JavaScript了。你可以直接在JavaScript源代码中直接使用echo。当JS代码运行时,它不是JSON,它被解释为JavaScript对象。

1

你真的不应该太想这件事。 PHP将数组序列化为JSON做得很好。

var data = { 
    items: <?php 
    $arr = array(); 
    foreach($query->result() as $row) { 
     $arr[] = array('label' => $row->district_name, 
        'data' => $row->countid); 
    } 
    echo json_encode($arr); 
    ?> 
}; 

[插入相同免责声明如上关于如何你真的想创建一个JavaScript对象]

0

这是JSON:

var foo = "{bar: 1}"; 

这不是JSON:

var foo = {bar: 1}; 

你的代码片段根本没有使用JSON,我的受过良好教育的g你是不需要它的。如果您使用PHP生成一些JavaScript代码,则可以简单地调整您的PHP代码以打印包含real JavaScript变量的文本。无需将内容编码为纯文本!

现在很明显,我们不需要JSON,让我们使用一个肮脏的技巧。 PHP有json_encode(),我们可以滥用JSON字符串类似于JavaScript变量的事实。我们所要做的就是调用json_encode()在我们的PHP变量和忘记引述结果:

<?php 

$foo = array(
    'bar' => 1, 
    'dot' => FALSE, 
); 

echo 'var JSONString = "' . json_encode($foo) . '";' . PHP_EOL; 
echo 'var realVariable = ' . json_encode($foo) . ';' . PHP_EOL; 

比较:

var JSONString = "{"bar":1,"dot":false}"; 
var realVariable = {"bar":1,"dot":false}; 

编辑:是的,我的JSONString不是有效的字符串...但我们得到的想法< :-)