2014-11-06 123 views
2

我一直在试图摆脱一个PHP脚本创建和使用JavaScript处理这个JSON的值如何从该JSON获取值?

{ 
    "category_id": "1", 
    "parent_id": "0", 
    "name": "Root Catalog", 
    "is_active": null, 
    "position": "0", 
    "level": "0", 
    "children": [{ 
     "category_id": "2", 
     "parent_id": "1", 
     "name": "categoria raiz", 
     "is_active": "1", 
     "position": "1", 
     "level": "1", 
     "children": [{ 
      "category_id": "14", 
      "parent_id": "2", 
      "name": "nombre1", 
      "is_active": "1", 
      "position": "1", 
      "level": "2", 
      "children": [] 
     }, { 
      "category_id": "12", 
      "parent_id": "2", 
      "name": "nombre2", 
      "is_active": "1", 
      "position": "2", 
      "level": "2", 
      "children": [] 
     }, { 
      "category_id": "11", 
      "parent_id": "2", 
      "name": "nombre3", 
      "is_active": "1", 
      "position": "3", 
      "level": "2", 
      "children": [] 
     }, { 
      "category_id": "10", 
      "parent_id": "2", 
      "name": "nombre4", 
      "is_active": "1", 
      "position": "4", 
      "level": "2", 
      "children": [] 
     }, { 
      "category_id": "7", 
      "parent_id": "2", 
      "name": "nombre5", 
      "is_active": "1", 
      "position": "7", 
      "level": "2", 
      "children": [] 
     }, { 
      "category_id": "6", 
      "parent_id": "2", 
      "name": "nombre6", 
      "is_active": "1", 
      "position": "8", 
      "level": "2", 
      "children": [{ 
       "category_id": "3", 
       "parent_id": "6", 
       "name": "nombre6_1", 
       "is_active": "1", 
       "position": "1", 
       "level": "3", 
       "children": [] 
      }, { 
       "category_id": "5", 
       "parent_id": "6", 
       "name": "nombre6_2", 
       "is_active": "1", 
       "position": "2", 
       "level": "3", 
       "children": [] 
      }, { 
       "category_id": "4", 
       "parent_id": "6", 
       "name": "nombre6_3", 
       "is_active": "1", 
       "position": "3", 
       "level": "3", 
       "children": [] 
      }, { 
       "category_id": "15", 
       "parent_id": "6", 
       "name": "6_4", 
       "is_active": "1", 
       "position": "4", 
       "level": "3", 
       "children": [] 
      }, { 
       "category_id": "16", 
       "parent_id": "6", 
       "name": "nombre6_5", 
       "is_active": "1", 
       "position": "5", 
       "level": "3", 
       "children": [] 
      }] 
     }] 
    }] 
} 

当我打电话包含的JavaScript在HTML刚刚返回:

undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,

我应该如何迭代儿童标签?

我的JavaScript如下:

<script type='text/javascript'> 
$(document).ready(function(){ 
    console.log('entra...'); 
    $.getJSON('ArbolCategorias.php', function(data) { 
    //console.log('data ...' + data); 
     $.each(data.children, function(key, val) { 
      if (data.children.has(children)){ 
       $.each(children.children, function(key, val){ 
        $('#jsonresult').append('<li id="' + key + '">' + val.category_id + ', ' + val.parent_id + ', ' + val.name + ', ' + val.is_active + ', ' + val.position + ', ' + val.level + ', ' + val.children + ', ' + '</li>'); 
       }); 
      } 
      else{ 
     $('#jsonresult').append('<li id="' + key + '">' + val.category_id + ', ' + val.parent_id + ', ' + val.name + ', ' + val.is_active + ', ' + val.position + ', ' + val.level + ', ' + val.children + ', ' + '</li>'); 
      } 
     }); 
    }); 
}); 

希望你能帮助我的家伙:d

+0

使用JavaScript的'JSON.parse(jsonstuff)'函数 – 2014-11-06 17:25:12

+0

[查看本答案](http:/ /stackoverflow.com/a/9329476/1072176)用于迭代选项。 – 2014-11-06 17:30:52

回答

3

里面的每一个()data.children尝试。

$(document).ready(function(){ 
     console.log('entra...'); 
     $.getJSON('ArbolCategorias.php', function(data) { 
     console.log('data ...' + data); 
      $.each(data.children, function(key, val) { 

      $('#jsonresult').append('<li id="' + key + '">' + val.category_id + ', ' + val.parent_id + ', ' + val.name + ', ' + val.is_active + ', ' + val.position + ', ' + val.level + ', ' + val.children + ', ' + '</li>'); 

      }); 
     }); 
    }); 

如果使用$。每次(数据,...你迭代的对象,你需要遍历其子列表

这是一个使用递归函数writeChildrens代码:

function writeChildrens(element){ 
    $.each(element.children, function(key, val) { 
     $('#jsonresult').append('<li id="' + key + '">' + val.category_id + ', ' + val.parent_id + ', ' + val.name + ', ' + val.is_active + ', ' + val.position + ', ' + val.level + '</li>');  
     if(val.children.length>0) writeChildrens(val);  
    });   
} 

$(document).ready(function(){ 
      console.log('entra...'); 
      $.getJSON('ArbolCategorias.php', function(data) { 
      console.log('data ...' + data); 
       writeChildrens(data); 
      }); 
     }); 
+0

现在我得到2,1,categoria raiz,1,1,1,[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],但是不是什么在下面的孩子和父目录... – drew 2014-11-06 17:33:11

+0

是的,你可以这样做! – Ragnar 2014-11-06 17:35:47

+0

这很好,因为val.children是一个对象数组 – Ragnar 2014-11-06 17:52:06

1

最后我明白了,感谢乌拉圭回合有很大的帮助很多拉格纳。我的剧本,现在看起来像

<script type='text/javascript'> 
$(document).ready(function(){ 
    $.getJSON('ArbolCategorias.php', function(data) { 
     //mejorar para que sea dinamico 
     $.each(data.children, function(key, val) { 
      $('#jsonresult').append('<li id="' + key + '">' + val.category_id + ', ' + val.parent_id + ', ' + val.name + ', ' + val.is_active + ', ' + val.position + ', ' + val.level + '</li>'); 
     }); 


     $.each(data.children, function(key, val) { 
      $.each(val.children, function(key, value) { 

        $('#jsonresult').append('<li id="' + key + '">' + value.category_id + ', ' + value.parent_id + ', ' + value.name + ', ' + value.is_active + ', ' + value.position + ', ' + value.level + '</li>'); 
      }); 
     }); 


     $.each(data.children, function(key, val) { 
      $.each(val.children, function(key, value) { 
       $.each(value.children, function(key, value) { 
        $('#jsonresult').append('<li id="' + key + '">' + value.category_id + ', ' + value.parent_id + ', ' + value.name + ', ' + value.is_active + ', ' + value.position + ', ' + value.level + ', ' + value.children + ', ' + '</li>'); 
       }); 
      }); 
     }); 
    }); 
}); 

这不是动态的,所以当我介绍一个新的孩子时,它不会被打印,但我仍然会在它上面工作:D