2015-12-18 64 views
0

我的项目是用d3.js绘制grahp。我发现了一些php代码,这绝对是我想要的。但我正在与C#和主场迎战所以我把它转换成asp.net。首先,我想编写一些硬编码数据样本并使用d3.js绘制图像。以及该PHP项目的JavaScript代码。现在我有一个返回json字符串的服务器端webmethod。参数dataSample是一个Dictionary类型。它看起来像下面,没有任何错误。Ajax检索Json字符串,但无法将成功数据循环为对象

return JsonConvert.SerializeObject(dataSample);

在前端我使用ajax来检索数据。

<script> 
     $.ajax({ 
      type: 'POST', 
      url: 'Map.aspx/read_data', 
      contentType: 'application/json; charset=utf-8', 
      data: "{ }", 
      dataType: "json", 
      success: function(response) { 
       d3.json("", function (data) {  
        graph.data = response.d; 
        drawGraph(); 
       }); 
      }, 
      error: function(error) { 
       console.log("Wwoops something went wrong !"); 
      } 
     }); 
    </script> 

Ajax调用成功完成,这是response.d像下面

{"DSO":{"name":"DSO","type":"group0","depends":["BPR","Transmission Company","Government"],"dependedOnBy":["TSO","Transmission Company"],"docs":""},"TSO":{"name":"TSO","type":"group1","depends":["BPR","DSO","Producer Secondary Energy","Government"],"dependedOnBy":["Producer Secondary Energy"],"docs":""}} 

然后我想每个循环JSON对象,所以我可以告诉drawGraph()来绘制控制台日志显示graph.data节点为每个对象,例如:

for (var name in graph.data) { 
     var obj = graph.data[name]; 
     console.log("name: " + name + "object: " + obj); 

我的问题是CONSOLE.LOG( “名称:” +名称+ “对象:” + OBJ)是不JSON输出每个对象。它循环每个字母而不是单个对象。

的incorrent的console.log输出 enter image description here

我想输出中的对象,而不是这个。

+0

的数据很可能还是一个JSON字符串,而不是一个对象呢,所以尝试解析它。请小心。 – Shilly

+2

另外,您的'ajax'调用很奇怪。你不需要'$ .ajax('和'd3.json',这两种方法都可以进行这个调用,你可以删除'd3.json'。 – Mark

回答

1
You need to parse json to loop it. Do a proper for loop using the parsed variable. 

<script> 
     $.ajax({ 
      type: 'POST', 
      url: 'Map.aspx/read_data', 
      contentType: 'application/json; charset=utf-8', 
      data: "{ }", 
      // remove this line 
      //dataType: "json", 
      success: function(response) { 
       parsedobj = jQuery.parseJSON(response); 
       // do your for loop here 
      }, 
      error: function(error) { 
       console.log("Wwoops something went wrong !"); 
      } 
     }); 
    </script> 
+0

嗨,我解析了Json字符串到对象。现在很好,但为什么我必须删除dataType:“json”? – Lucky

0

由于@shilly没有正确的建议,你循环一个JSON ...
这应该是足够了:

var graphDataObject = JSON.parse(graph.data); 

for (var name in graphDataObject) { 
    var obj = graphDataObject[name]; 
    console.log("name: " + name + " object: " + obj); 
} 
0

你必须JSON.parse字符串作为JSON,然后循环JSON对象。

例子:

<script> 
var r = JSON.parse('{"DSO":{"name":"DSO","type":"group0","depends":["BPR","Transmission Company","Government"],"dependedOnBy":["TSO","Transmission Company"],"docs":""},"TSO":{"name":"TSO","type":"group1","depends":["BPR","DSO","Producer Secondary Energy","Government"],"dependedOnBy":["Producer Secondary Energy"],"docs":""}}'); 

for (var g in r) { 
    for (var c in r[g]) { 
      console.log(r[g]['name']); 
    } 

}  
</script>