2011-03-31 93 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))