0 votos

Manejo de librería jit.js con json

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);
     };

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

1voto

Mayte Terrero Puntos30

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);

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: