【发布时间】:2014-10-19 10:08:31
【问题描述】:
我正在尝试在我的 asp.net 应用程序中使用 Chart Js 创建图表。我正在从代码数据库中获取数据,并根据后端的文档生成字符串。然后我调用该 Web 方法来获取图表数据并将其呈现在页面上。
function LoadVarianceChart() {
var data;
$.ajax({
type: "POST",
url: "Analysis.aspx/GetVarianceChart",
data: "",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
$("#dvVarianceChart").html("");
var obj = r.d;
console.log(obj);
data = obj;
var el = document.createElement('canvas');
$("#dvVarianceChart")[0].appendChild(el);
//Fix for IE 8
if ($.browser.msie && $.browser.version == "8.0") {
G_vmlCanvasManager.initElement(el);
}
var ctx = el.getContext('2d');
ctx.canvas.width = 300;
ctx.canvas.height = 300;
var userStrengthsChart;
userStrengthsChart = new Chart(ctx).Bar(data);
},
failure: function (response) {
alert('There was an error.');
}
});
}
这是我的 c# web 方法。
[WebMethod]
public static string GetVarianceChart()
{
DataSet ds = Utility.ExecuteDataTable("GetAdvarienceByBrandFamily", null);
VarianceChartModel bar = new VarianceChartModel();
bar.labels = ds.Tables[0].Rows[0][0].ToString().Split(',');
bar.datasets = new List<datasets>();
for (int i = 1; i < ds.Tables.Count; i++)
{
datasets dataset = new datasets();
dataset.data = Array.ConvertAll(ds.Tables[i].Rows[0][0].ToString().Split(','), decimal.Parse);
dataset.label = "new";
dataset.fillColor = "rgba(220,220,220,0.5)";
dataset.highlightFill = "rgba(220,220,220,0.75)";
dataset.highlightStroke = "rgba(220,220,220,1)";
dataset.strokeColor = "rgba(220,220,220,0.8)";
bar.datasets.Add(dataset);
}
var serializer = new JsonSerializer();
var stringWriter = new StringWriter();
var writer = new JsonTextWriter(stringWriter);
writer.QuoteName = false;
serializer.Serialize(writer, bar);
writer.Close();
var json = stringWriter.ToString();
return json.ToString();
}
}
在这里,我的 Web 方法正在按照文档正确生成字符串。如果我在图表 js 中静态使用生成的字符串,那么图表会正确生成。但是当我尝试通过调用后端方法来提供相同的字符串时,它给了我 Uncaught TypeError: Cannot read property 'length' of undefined
我不知道为什么它对同一个字符串会这样。这与 C# 字符串和 java 脚本字符串兼容性有关吗?
【问题讨论】:
-
我的意思是你需要检查chart.js的数据格式请求,可能需要一些对象的长度属性,并且可能会丢失。
-
是的。如果我将 console.log 字符串直接提供给 chart.js,那么它工作正常。但是,如果我通过调用我发布的方法来提供它,那么它会引发错误。所以 console.log(obj);字符串真的很好
标签: javascript c# asp.net charts