2012-07-27 43 views
0

我一直在研究很多,但找不到正確的答案。根據用戶請求使用查詢結果爲jsTree加載節點

我想知道如何根據需要生成jsTree,並且必須從包含在數據庫中的數據加載節點。 數據將由函數返回。

我的目的是當用戶點擊一個節點時,腳本根據數據庫查詢只生成該節點的子節點。

這樣做,我嘗試過很多劇本,我發現這裏和我想要做的最相似的就是一個:

$(「#樹CAT1」)jstree({

"plugins": ["themes", "json_data", "ui"], 
"themes": {"theme": "classic","dots": true,"icons": true}, 
"json_data": { 
     //root elements 
    "data": [{"data":'A node',"state":'closed',"attr":{"id":'A'}}], 
    "ajax": { 
     "type": 'POST', 
     "data": {"action": 'getChildren'}, 
     "url": function (node) { 
      var nodeId = node.attr('id'); //id="A" 

      return 'yuorPathTo/GetChildrenScript/' + nodeId; 
     }, 
     "success": function (new_data) { 
      //where new_data = node children 
      //e.g.: [{'data':'A1 node','attr':{'id':'A1'}}, {'data':'A2 node','attr':{'id':'A2'}}] 
      return new_data; 
     } 
    } 
} 

});

它最初是從Irishka寫的。

問題是我無法使它工作。主要問題是要知道在調用「return yuorPathTo/GetChildrenScript /」時是否返回了什麼數據,以及是否有人可以提供該數據的示例。

任何幫助將不勝感激。

回答

0

它需要一個JSON格式的數據。例如:

[{"attr":{"id":"1","rel":"folder"},"data":"FolderName1","state":""},{"attr":{"id":"2","rel":"folder"},"data":"FolderName2","state":""}]

+0

的點我試圖將一些數據添加到return語句來測試代碼工作,因爲後來我將添加一個功能返回更多數據。所以我做的是: return「[{'data':'A node','state':'closed','attr':{'id':'A'}}]」; 但是,當我把數據它不起作用,那麼問題是我應該在那裏讓代碼工作。 – Zamarro 2012-07-27 13:49:37

+0

工作腳本: $(樹).jstree({ 「插件」: 「json_data」, 「UI」, 「CRRM」, 「免打擾」], 「json_data」:{ 「AJAX」:{ 「URL」: 「ajax.php」, 「數據」:功能(N){ 返回{ 「ID」:n.attr n.attr( 「ID」):0 }; ?} } } }) – Kir 2012-07-27 13:59:45

+0

我正在嘗試你的腳本,但有一些事情我沒有得到: $(。tree).jstree({ – Zamarro 2012-07-27 14:19:58

0

嗯,我會嘗試寫,你需要代碼..

在HTML中,我們有空div#樹CAT1

<div id="tree-cat1"></div>

在JS :

$("#tree-cat1").jstree({ 
    "plugins": ["themes", "json_data", "ui"], 
    "themes": {"theme": "classic","dots": true,"icons": true}, 
    "json_data": { 
     "ajax": { 
      "type": 'POST', 
      "url": 'yuorPathTo/GetChildrenScript.php', 
      "data": function (n) { 
       return { 
        // This is variables that send in POST to PHP script 
        "action": 'getChildren', 
        "id" : n.attr ? n.attr("id") : "A1" // A1 is most parent node. You can change it by your parent id. This string mean: if node has id - we get it's childs, but if node has not id (there is no nodes) - we get first parent node 
       } 

      } 
     } 
    } 
} 

PHP腳本在「yuorPathTo/GetChildrenScript.php」例如可能是這樣的:

$result = array(); // Array for json 
$id=$_GET['id']*1; 
// This query selects children of this parent and for each child selects count of its own children 
$query = "SELECT id, name, rel, cnt FROM 
    (
     SELECT id, name, rel FROM yourTabe WHERE parent_id = '$id' 
    ) v_1, (
     SELECT parent_id, COUNT(*) as cnt FROM yourTable GROUP BY parent_id 
    ) v_2 
    WHERE v_1.id = v_2.parent_id 
"; 
$res = $dbh->query($query); 
while ($row = $res->fetch(PDO::FETCH_ASSOC)) { 
    $helper = array(); // Array for each Node's Data 
    $helper['attr']['id'] = 'A'.$row['id']; 
    $helper['attr']['rel'] = $row['rel']; 
    $helper['data'] = $row['name']; 
    $helper['state'] = $row['cnt'] > 0 ? 'closed' : ''; // if state='closed' this node can be opened 
    $rezult[] = $helper; 
} 
echo json_encode($rezult); 
+0

嗨,讓我們說,我想再次加載相同的兩個節點再次無休止地。我可以使用'flatData.xml'來代替'yuorPathTo/GetChildrenScript.php'嗎?因爲我有兩個節點寫入XML文件,我想一次又一次地加載它們,但我試圖改變那一行,但它不起作用。 – Zamarro 2012-07-31 11:59:28

+0

您可以在PHP腳本(http://ru2.php.net/xml)中加載xml-data,然後以json格式將它返回給JS – Kir 2012-07-31 12:03:32

+0

好的,事情是我修改的文件是在jsp所以我不認爲我可以使用PHP或PHP腳本,我可以編寫一個返回JSON對象的java函數,但我不知道它是否可行。 – Zamarro 2012-07-31 12:35:06