将字符串从ajax推送到AmCharts的数组

时间:2017-04-05 17:44:10

标签: javascript ajax http tcp

嗨我在javascript中使用了noob,我需要你的帮助。我想从我的MCU绘制带有实时数据的图表。但不知道如何将字符串推入数组。在此代码中,Array(chart.dataProvider)仍未定义

var chart = AmCharts.makeChart("chartdiv",{

...

"dataProvider":[],
});

function f() { 
     var req = new XMLHttpRequest();
     req.onreadystatechange = function() {
     if (this.readyState == 4 && this.status == 200) {
     var value = this.responseText;        //get the response data as a string            
     //  value= {cat: 1, c1: 2, c2: 3};    //this metod draw my chart but i want RT data...
     alert(value); //output: {cat: 1, c1: 2, c2: 3}
     chart.dataProvider.push(value);
     chart.validateData();
                                                      }};
     req.open("GET", "http://", true);
     req.send();
     }

也有效:

chart.dataProvider.push({ cat: 1, c1: 2, c2: 3 });

但是如何从XMLHttpRequest推送数据?

2 个答案:

答案 0 :(得分:0)

在推送新值之前,您需要初始化它chart.dataProvider = []

如果这有问题 - 您还可以检查它是否未定义,如果是,请将其初始化chart.dataProvider = chart.dataProvider? chart.dataProvider : []

最后,如果你的问题是关于ajax操作 - 尝试使用Promises或回调来等待push操作。

希望有所帮助

答案 1 :(得分:0)

好的家伙我找到了非常简单的解决方案:

var input = this.responseText;
alert (input);   // output: 1category500fColumn1000sColumn
var i = input.substring(0, input.indexOf('category'));
var ii = input.substring(input.indexOf('category')+8, input.indexOf('fColumn'));
var iii = input.substring(input.indexOf('fColumn')+7, input.indexOf('sColumn'));
     chart.dataProvider.push({
     cat: i,
     c1: ii,
     c2: iii});

所以它应该是这样的:

        {cat: 1,
         c1: 500,
         c2: 1000}