当我想到一个问题时,我正在研究D3组件。由于我正在使用不同的阵列,我想知道为什么他们需要不同的数据处理,当它们都包含相同的数据时。
第一种情况:我有一个'硬编码'数组,如下所示:
var tmp = [
{
"Weight": 0.0,
"Speed": 59.9,
"Depth": 362.24000,
"Time": "2014-04-09T10:01:23",
"Id": 0
}, {
"Weight": 10.0,
"Speed": 59.9,
"Depth": 394.07000,
"Time": "2014-04-09T10:01:56",
"Id": 1
}];
或者,在Chrome控制台中进行检查时:
每当我使用此数组提供组件时,组件工作正常,并且所有线/轴都被正确绘制。
第二种情况:我使用d3.json从我的控制器获取一个数组,并在将其记录到控制台时返回以下内容:
[{"Weight":0.0,"Speed":59.9,"Depth":362.24000,"Time":"2014-04-09T10:01:23","Id":0},{"Weight":10.0,"Speed":59.9,"Depth":394.07000,"Time":"2014-04-09T10:01:56","Id":1}]
所以,每当我试图做json.foreach()
时(json是控制器中数组的名称):
json.forEach(function(d) {
var date = format(d.Time);
d.Time = date;
});
启动foreach函数时出现以下错误:
Uncaught TypeError: undefined is not a function
。
为了使其工作,我必须对我的控制器通过JSON.parse(json)
返回的数据执行d3.json()
,然后我的数组如下所示:
我还应该提一下我的asp.net mvc控制器返回:
string json = JsonConvert.SerializeObject(Model.Trend.ToArray());
return Json(json, JsonRequestBehavior.AllowGet);
我知道从控制器返回的数组在检查时看起来像一串值,但我真的不明白为什么。
所以,我猜我的问题真的归结为这个; 为什么我的阵列" tmp"工作,但我用d3.json获取的数组需要在工作之前解析?
答案 0 :(得分:0)
' tmp'运行脚本时,浏览器会为您解析数组。您可以在故意创建故障阵列时检查此项,例如在某处放置一个双括号。 您的浏览器会告诉您它并不了解您的需求' tmp'变量是。
但是,当您创建对MVC控制器的调用时,它事先并不知道该控制器期望的结果类型。也许稍后将在您的应用程序中调用的其他控制器将返回XML数据,这需要另一种解析方式。
从任何地方获取JSON数据的简便方法'是使用jQuery .getJSON方法。 这不需要额外的调用来解析数据。
另外,你的D3呼叫是什么样的?您声明了什么函数来处理回调?
答案 1 :(得分:0)
试
$.each(json, function (index, d) {
var date = format(d.Time);
d.Time = date;
});