从php json_encode显示json数据?

时间:2011-03-31 16:15:05

标签: php jquery mysql json

我有这个jquery代码,它弹出一个输入选择器,它应该显示如下:

$("#demo-input-pre-populated").tokenInput("http://shell.loopj.com/", {
                prePopulate: [
                    {id: 123, name: "Slurms MacKenzie"},
                    {id: 555, name: "Bob Hoskins"},
                    {id: 9000, name: "Kriss Akabusi"}
                ]
            });

当我尝试使用php从数据库中获取vales时:

prePopulate: [
                    <?
                   $responses = array();
                    $topicJSON=getQtopics($getQ);
                    while($row = mysql_fetch_array($topicJSON)){
                    $response = array(
                        'id' => $row['id'],
                        'name' => $row['name']

                    );
                    $responses[] = $response;
                }
                echo json_encode($responses);
 ?>
        ],

显示如下的json数据:

 prePopulate: [
         [{"id":"1","name":"Dormitree"},
         {"id":"1482","name":"carriage of goods"}]        
        ],

但在#demo-input-pre-populated"输入我得到未定义,我认为它因为没有回应json的推进,我怎么能解决这个问题谢谢:))

2 个答案:

答案 0 :(得分:3)

如果查看两个JS输出,唯一的区别是在从PHP输出的情况下你有两个额外的方括号[] - 所以你要创建一个JSON对象数组的数组在这种情况下,您只需要一个JSON对象数组。

摆脱[]封闭的prePopulate,因为json_encode已经为您做了这样的事情:

prePopulate: <?
                $responses = array();
                $topicJSON=getQtopics($getQ);
                while($row = mysql_fetch_array($topicJSON)){
                        $response = array(
                       'id' => $row['id'],
                       'name' => $row['name']
                    );
                    $responses[] = $response;
                }
                echo json_encode($responses);
            ?>,

答案 1 :(得分:2)

你的prePopulate变量是一个包含一个对象数组的数组,但你只想让它成为一个对象数组。

您可以在PHP块之前和之后取下[和]括号,或者在PHP块中回显:array_pop(json_decode($responses))