2016-04-03 51 views
0

我正在玩Cal-HeatMap,并获得了一些静态json-data运行示例。现在我想使用REST服务动态加载json-data。不幸的是,当我使用REST服务中的数据时,这并不像预期的那样工作。cal-HeatMap问题与来自REST服务的数据

这是CAL-热图的代码(REST风格的版本,它不工作):

var heatData = dojo.xhr.get({ 
    url:"http://localhost:8080/webapp/xfull2.nsf/services.xsp/heatdata", 
    handleAs:"json" 
}); 

var cal = new CalHeatMap(); 
cal.init(
{ 
    itemSelector:"#cal-heatmap", 
    range: 10, 
    start: new Date(2016, 3,4,1), 
    data: heatData 
} 
); 

的REST调用似乎火,并返回一个JSON结果:

{ 
    "1459742400":1, 
    "1459749600":1, 
    "1459753200":1, 
    "1459756800":1, 
    "1459767600":1 
} 

在浏览器控制台我看到这个错误: TypeError:a is undefined cal-hea .... min.js(Line 8,Column 30282)(in cal-heatmap.min.js)

我将JSON从REST调用中保存为.json文件,并使用此文件测试cal-HeatMap。在这种情况下,它可以正常工作。这是我的代码的静态版本:

var cal = new CalHeatMap(); 
cal.init(
{ 
    itemSelector:"#cal-heatmap", 
    range: 10, 
    start: new Date(2016, 3,4,1), 
    data: "js/cal-heatmap/sample-json/testdata.json" 
} 
); 

的testdata.json文件看起来像这样(同上):

{ 
    "1459742400":1, 
    "1459749600":1, 
    "1459753200":1, 
    "1459756800":1, 
    "1459767600":1 
} 

结果看起来是这样的(这是OK): enter image description here

我在这里错过了什么?任何帮助或点是赞赏。

回答

0

嗯,我终于找到了我的代码问题 - 问题的答案是相当明显的。当我使用xhr.get进行异步REST调用时,我必须在回调中创建HeatMap对象。否则,在创建HeatMap对象时,数据不可用。

正确的代码如下所示:

var heatData = dojo.xhr.get({ 
    url:"http://localhost:8080/webapp/xfull2.nsf/services.xsp/heatdata", 
    handleAs:"json", 
    load: function(data) { 
     var cal = new CalHeatMap(); 
     cal.init({ 
       itemSelector:"#cal-heatmap", 
       range: 10, 
       start: new Date(2016, 3,4,1), 
       data: data 
       }); 
    } 
})