2011-03-31 92 views
1

我有poplautes一个输入选择器,它应显示这样这个jQuery代码:显示来自php json_encode的json数据?

$("#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这样获得从数据库中瓦莱斯:

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"输入我得到了一个未定义的,我认为它的监守PHP为n ot呼应json推进器,我该如何解决这个谢谢:))

回答

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); 
      ?>, 
+0

感谢非常干净的答案,:))) – pingpong 2011-03-31 16:24:59

+0

我能问你一个问题,你会不会能够刷新prePoplaute使用jquery后点击动作,即'$(“。button”)。click(//刷新prePoplaute',如果你明白我的意思:)) – pingpong 2011-03-31 16:29:28

+1

@pingpong - 看起来这个插件不支持这个,你可能会与作者核对或投入功能请求。如果您查看源代码,'insert_token()'函数会插入新的标记,但我不熟悉JavaScript,无法确定如何(如果可能)获取对该函数的引用并使用新值调用它。 – 2011-03-31 17:04:21

2

你的prePopulate变量是一个包含对象数组的数组,但你只是希望它是一个对象数组。

您可以脱下[和]括号之前和之后的PHP块,或在你的PHP代码块呼应这样的:array_pop(json_decode($responses))