Javascript jqPlot图表–;不’;t显示ajax数据

Javascript jqPlot图表–;不’;t显示ajax数据,javascript,spring-mvc,jqplot,Javascript,Spring Mvc,Jqplot,我正在使用jqPlot“AJAX JSON数据呈现程序”,如中所述:我的服务器端是Spring MVC。在服务器上,我呈现一个对象[][]的矩阵,矩阵的每一行包含2个对象:[LocalTime.toString(“HH:mm”),Integer]。响应返回为“@ResponseBody” 我可以看到数据是从服务器检索到的,当我在警报中显示它时,我会看到以下内容:[[“09:00”,5],“09:30”,5],“10:30”,5],“11:00”,10],“11:30”,10],“12:30”,1

我正在使用jqPlot“AJAX JSON数据呈现程序”,如中所述:
我的服务器端是Spring MVC。在服务器上,我呈现一个对象[][]的矩阵,矩阵的每一行包含2个对象:[LocalTime.toString(“HH:mm”),Integer]。响应返回为“@ResponseBody” 我可以看到数据是从服务器检索到的,当我在警报中显示它时,我会看到以下内容:
[[“09:00”,5],“09:30”,5],“10:30”,5],“11:00”,10],“11:30”,10],“12:30”,10],“13:00”,5]
我还尝试使用
List
而不是数组。 我不能让它工作。我得到的只是一张空表。 下面是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>

$(文档).ready(函数(){
var ajaxDataRenderer=函数(url、绘图、选项){
var-ret=null;
$.ajax({
async:false,
url:url,
数据类型:“json”,
成功:功能(数据){
ret=数据;
}
});
警报(“OUT:+ret”);
返回ret;
};
var jsonurl=“chartData”;
变量plot2=$.jqplot('chart',jsonurl{
dataRenderer:ajaxDataRenderer,
数据渲染器选项:{
未使用的可选URL:jsonurl
}
});
});
我在这里看到,每个人都建议构建一个字符串并解析它。这是唯一的办法吗?
我也复习了几个类似的问题,但找不到答案。
如果有任何提示,我们将不胜感激。

在您的情况下,进入绘图的数据应该是什么样子

由于您在x轴上使用的是时间(日期),因此必须告诉图表如何渲染时间(日期),没有比使用
DateAxisRenderer
更好的方法。下面的代码(也在示例中)显示了它是如何完成的:

    axes: {
        xaxis: {
            label: "x label",
            renderer: $.jqplot.DateAxisRenderer,
            tickOptions:{formatString:'%H:%M'}
        }
    }

这个问题很久以前就被问过了,所以我想你现在已经离开了……但我也在寻找这个问题……并且刚刚找到了答案。嗯……一个答案

问题是,当您输入日期时,您从ajaxDataRenderer返回的内容不再像json。我不知道为什么,但如果您将数据类型更改为文本,则您的警报将输出数据。但是图表失败了,因为它没有设置为处理字符串

因此…使用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以返回表示数据的文本


希望这能帮助其他人寻找答案

根据数据渲染器文档,jsonurl应该具有ajax url,而不是“chartData”。。。这是从哪里来的?很可能是@Rodik说你的
url
无效。chartData在web应用程序上下文中的真正含义是servlet的名称吗?尝试在
FireFox
中运行你的应用程序,查看
url在
Firebug`中的样子,然后查看它是否与servlet的
url
匹配。chartData是http url,它在我的控制器中映射到返回对象[]矩阵的方法。“ajaxurl”是什么意思?我不认为这是问题所在,因为我收到了回复。梅隆,如果您收到了回复,并且格式良好,那么
url
就可以了。我确信,通过ajax
url
@Rodik,意思是您向
ajax
请求提供的
url
。还请查看我的答案,我想这一定是您遇到的问题。好的,我添加了
DateAxisRenderer
仍然不好。我可以看到画布上显示了最小值和最大值(将最小值和最大值添加到xaxis),但没有图形。你还有别的想法吗?可能是同步问题?sript应该位于html标题中吗?在我看来,将脚本始终放在标题中。虽然可能是别的。在我的回答中,我已经在JSFIDLE中展示了如何格式化数据,但是我无法猜测代码中可能有什么错误。为什么不构建一个显示问题的脚本?@Boro您应该始终将脚本放在页面底部-这是因为浏览器必须停止所有呈现/布局,以便在适当位置下载JS文件,以防它们包含文档。write()。这是YSlow和PageSpeed中建议的最佳实践,我想我现在明白了。对那些感兴趣的人来说,一个很好的例子就是Hi@Boro,我正要用一个例子来回答;在document.write('hello')中放置一个脚本,演示脚本是内联计算的(但在呈现时不显示暂停)+1对于这个链接,史蒂夫·索德斯·查普(Steve Souders chap)写了YSlow,并有几本关于网页性能的书——真是好东西。干杯