Ajax 为 Highcharts 系列调用 returns 字符串但结果错误(解析错误?)
Ajax call returns string for Highcharts series but result is wrong (parsing error?)
我正在开发一个使用 Highcharts 的 Java Spring-Hibernate 应用程序。我有一个 Java 脚本函数,当被调用时,它会进行 Ajax 调用以获取图表数据(系列)并使用它创建图表:
<!-- Stacked bar chart -->
<script type="text/javascript">
//Function that plots the highcharts chart
function plot(park) {
$.ajax({
type: "get",
url: "MainView/report/datagaps/" + park,
dataType: "text",
error: function (error) {
console.log(error);
alert('Error while requesting datagaps for ' + park + ' : ' + error);
},
success: function (result) {
$("#chart" + park).highcharts({
chart: {
type: 'column'
},
series: result
});
}
});
}//END_FUNCTION
</script>
我删除了大部分情节选项代码,因此您会在上面看到最相关的代码。有一个处理这个请求的模型方法:
@RequestMapping(value = "/datagaps/{parkName}", method = RequestMethod.GET)
public @ResponseBody String datagaps(@PathVariable String parkName, Map model, HttpSession session) {
LOGGER.debug("Successfully called datagaps for '" + parkName + "'");
LOGGER.debug((String) session.getAttribute("chartData"+parkName));
return (String) session.getAttribute("chartData"+parkName);
}//END_METHOD
方法很简单:返回一个session字符串变量,就是series: result
中应该用到的那个。
问题是这会产生意想不到的结果:
但是,如果我在加载表单之前设置了一个模型变量 session.setAttribute("chartData" + park, rrdao.getParkData().get(park));
并且我使用它而不是像 series: ${chartDataAA}
这样的结果,它会起作用:
这很奇怪,因为使用的数据完全相同:ajax 调用和模型变量都来自同一个地方,并且在 beign 发送之前记录它们,这让我可以确定数据很好。此数据的格式类似于 [{name:'AA01', data: [[1412114400000,0],[1412200800000,0],[1412287200000,0],[1412373600000,0],[1412460000000,0],[1412546400000,0],[1412632800000,0]}]
我敢打赌,当它从 ajax 调用返回时,可能是由于单引号引起的某种字符串解析问题,但我不知道如何处理它。
请帮忙!
也许是拼写错误,但你的单曲系列在数据数组中缺少括号。应该是:[{name:'AA01', data: [[1412114400000,0],[1412200800000,0],[1412287200000,0],[1412373600000,0],[1412460000000,0],[1412546400000,0],[1412632800000,0]] }]
更改:dataType: "text"
到 dataType: "json"
然后在控制器中,如果你使用 jackson json 只需 return 一个 List
我正在开发一个使用 Highcharts 的 Java Spring-Hibernate 应用程序。我有一个 Java 脚本函数,当被调用时,它会进行 Ajax 调用以获取图表数据(系列)并使用它创建图表:
<!-- Stacked bar chart -->
<script type="text/javascript">
//Function that plots the highcharts chart
function plot(park) {
$.ajax({
type: "get",
url: "MainView/report/datagaps/" + park,
dataType: "text",
error: function (error) {
console.log(error);
alert('Error while requesting datagaps for ' + park + ' : ' + error);
},
success: function (result) {
$("#chart" + park).highcharts({
chart: {
type: 'column'
},
series: result
});
}
});
}//END_FUNCTION
</script>
我删除了大部分情节选项代码,因此您会在上面看到最相关的代码。有一个处理这个请求的模型方法:
@RequestMapping(value = "/datagaps/{parkName}", method = RequestMethod.GET)
public @ResponseBody String datagaps(@PathVariable String parkName, Map model, HttpSession session) {
LOGGER.debug("Successfully called datagaps for '" + parkName + "'");
LOGGER.debug((String) session.getAttribute("chartData"+parkName));
return (String) session.getAttribute("chartData"+parkName);
}//END_METHOD
方法很简单:返回一个session字符串变量,就是series: result
中应该用到的那个。
问题是这会产生意想不到的结果:
但是,如果我在加载表单之前设置了一个模型变量 session.setAttribute("chartData" + park, rrdao.getParkData().get(park));
并且我使用它而不是像 series: ${chartDataAA}
这样的结果,它会起作用:
这很奇怪,因为使用的数据完全相同:ajax 调用和模型变量都来自同一个地方,并且在 beign 发送之前记录它们,这让我可以确定数据很好。此数据的格式类似于 [{name:'AA01', data: [[1412114400000,0],[1412200800000,0],[1412287200000,0],[1412373600000,0],[1412460000000,0],[1412546400000,0],[1412632800000,0]}]
我敢打赌,当它从 ajax 调用返回时,可能是由于单引号引起的某种字符串解析问题,但我不知道如何处理它。
请帮忙!
也许是拼写错误,但你的单曲系列在数据数组中缺少括号。应该是:[{name:'AA01', data: [[1412114400000,0],[1412200800000,0],[1412287200000,0],[1412373600000,0],[1412460000000,0],[1412546400000,0],[1412632800000,0]] }]
更改:dataType: "text"
到 dataType: "json"
然后在控制器中,如果你使用 jackson json 只需 return 一个 List