我正在使用 jqPlot“AJAX JSON 数据渲染器”,如以下所述:http://www.jqplot.com/tests/data-renderers.php .
我的服务器端是Spring MVC。在服务器上,我渲染了一个 Object[][] 矩阵,矩阵的每一行包含 2 个对象:[LocalTime.toString(“HH:mm”), Integer]。响应返回为“@ResponseBody”
我可以看到数据是从服务器检索的,当我在警报中显示它时,我看到以下内容:
[["09:00",5],["09:30",5],["10:00",5],["10:30",5],["11:00",10],["11:30",10],["12:00",10],["12:30",10],["13:00",5]]
我也尝试使用 List<List<Object>>
而不是数组。
我无法让它工作。我得到的只是一张空图表。
这是javascript:
<script>
$(document).ready(function(){
var ajaxDataRenderer = function(url, plot, options) {
var ret = null;
$.ajax({
async: false,
url: url,
dataType:"json",
success: function(data) {
ret = data;
}
});
alert("OUT: " + ret);
return ret;
};
var jsonurl = "chartData";
var plot2 = $.jqplot('chart', jsonurl,{
dataRenderer: ajaxDataRenderer,
dataRendererOptions: {
unusedOptionalUrl: jsonurl
}
});
});
</script>
我在这里看到了JSON for jqPlot每个人都建议构建一个字符串并解析它。这是唯一的方法吗?
我还查看了几个类似的问题,但找不到答案。
将不胜感激任何提示......
最佳答案
很久以前就有人问过这个问题,所以我想你现在已经开始了……但我也在寻找这个问题……并且刚刚找到了答案。嗯...一个答案。
问题是,当您输入日期时,您从 ajaxDataRenderer 传回的东西看起来不再像 json。我不知道为什么,但是如果您将 dataType 更改为文本,那么您的警报将输出数据。但是图表失败了,因为它没有设置为处理字符串。
所以....你使用 eval,强制 js 将字符串转换为实际数组,如下所示:
var ajaxDataRenderer = function(url, plot, options) {
var ret = null;
$.ajax({
// have to use synchronous here, else the function
// will return before the data is fetched
async: false,
url: url,
dataType:"text",
success: function(data) {
ret = data;
}
});
//clear out the loading message from the div
$('#chartdiv').empty();
//evaluate the returned string...to turn it into the data structure.
return eval(ret);
};
无论如何,这对我有用。然后我制作了我的 url 以返回代表数据的文本。
希望这可以帮助其他人寻找这个问题的答案!
关于javascript - jqPlot 图表——不显示 ajax 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536586/