Manejo de la libreria jit.js con json


14 de Septiembre del 2016

Hola!

mirad, tengo un fichero .js que carga un json y está funcionando.En principio se le carga un json completo , y luego al hacer click, expande los hijos del nodo clickado:

-cuando se carga la página:
//load json data
st.loadJSON(json);
//compute node positions and layout
st.compute();
//optional: make a translation of the tree
st.geom.translate(new $jit.Complex(-200, 0), "current");
//emulate a click on the root node.
st.onClick(st.root);
//end

-Cuando se hace un click en el nodo:
onCreateLabel: function(label, node){
        label.id = node.id;           
        label.innerHTML = node.name;
        label.onclick = function(){
                      st.onClick(node.id);
         };

(el objeto st es una clase de la librería jit.js)

He introducido una modificación , para que al principio se cargue un json y después otro más grande al hacer click en un nodo: onCreateLabel: function(label, node){ label.id = node.id;
 label.innerHTML = node.name; label.onclick = function(){
        var http = new XMLHttpRequest();
        var url = "inicio_pru.php";
        var params = "callFunction=arbol_completo";
        http.open("POST", url, true);
        //Send the proper header information along with the request
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        http.send(params);
        http.onreadystatechange = function() {//Call a function when the state changes.
                    if(http.readyState == 4 && http.status == 200) {

                             json=http.responseText;
                             st.loadJSON(json);
                              //compute node positions and layout
                             st.compute();
                              //optional: make a translation of the tree
                             st.geom.translate(new $jit.Complex(-200, 0), "current");
                             //emulate a click on the root node.
                             st.onClick(node.id);
                      }
            };

La carga de la página va correcta , pero al clickar en el label de un nodo , me da el siguiente error: jit.js:8795 Uncaught TypeError: Cannot read property 'id' of undefined

El json es asi:

'{"id":"38358","name":"Anillo Critico","data":{"$color":"#008000","$type":"circle"},"children":[]}';

Con lo que deduzco que al hacer st.loadJSON(json), se crea un node con un id, un name y un data, y se crea uno por cada id del json. Cuando hago click en uno, le mando a st.onClick(node.id) el node.id de ese en concreto.

¿me podéis ayudar? Muchisimas gracias de antemano



19 de Septiembre del 2016

Estaba pasándole el json como texto y no como objeto.Al poner esto :

json=http.responseText; json=JSON.parse(json);

convierte el texto json a un objeto json que puede ser ya cargado:

st.loadJSON(json);