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],[141246‌​0000000,0],[1412546400000,0],[1412632800000,0]] }]

更改:dataType: "text"dataType: "json"

然后在控制器中,如果你使用 jackson json 只需 return 一个 List