我正在拉一些JSONP来检索数据以插入高级图表......
DOM.sinkEvents((com.google.gwt.user.client.Element) dropBox.getElement(), Event.ONCHANGE );
DOM.setEventListener((com.google.gwt.user.client.Element) dropBox.getElement(), new EventListener() {
@Override
public void onBrowserEvent(Event event) {
if (DOM.eventGetType(event) == Event.ONCHANGE) {
Window.alert("change fired");
dropBox.addItem("who");
consoleLog("selected: "+ dropBox.getSelectedIndex());
}
}
});
通过Firebug查看时,数据结构是(示例)....
$(function() {
$.getJSON("http://xxxx.xxxxx&?callback=?", function(json){
var data = json;
var options = {
xAxis: {
type: 'datetime'
},
series: [{
data: []
}]
}
Highcharts.each(data, function(p, i) {
for (var i = 0; i < p.length; i++) {
options.series[0].data.push(
[p[i].timeBucket, parseFloat(p[i].errors)]
);
}
});
$('#container').highcharts(options);
});
});
Firebug中显示的结构是10个对象,这是真的,但对于我的生活,我只是无法解析它。
结果,没有任何反应。
我所做的是卷曲响应并将其保存为&#34; data.json&#34;并相应地更改了我的代码......
[[{"timeBucket": XXXXXX, "errors": 10}],[{"timeBucket": XXXXXX, "errors": 30}],[{"timeBucket": XXXXXX, "errors": 20}]] ......
它像冠军一样!当我在console.log中时,我得到的类型是&#34;对象&#34; (单数),所以看来我需要以某种方式将所有这10个对象压缩成一个,并且不知道该怎么做。
我尝试过JSON.stringify而没有运气,我尝试过JSON.stringify(json)然后尝试JSON.parse(json)
当我在Firebug中看到响应文本时,它正是我正在寻找的。任何人都知道如何修改我的代码以使用诱人的和需要的响应Text而不是10个目标代码?
答案 0 :(得分:2)
您可以使用jQuery.map重新映射它,以便您的对象位于一个数组中。
描述:将数组或对象中的所有项目转换为新的项目数组。
因此您必须将var data = json;
替换为
var data = $.map(json,function(x,i){
return x[0];
});
这将为您提供[{},{},{}]
格式,您可以在循环中访问
$.each(data, function(i,p) {
options.series[0].data.push(
[p.timeBucket, parseFloat(p.errors)]
)
});
或者,如果您想保留原始循环,您可以
for (var i = 0; i < data.length; i++) {
options.series[0].data.push(
[data[i].timeBucket, parseFloat(data[i].errors)]
);
}
var x = [[{"timeBucket": 111, "errors": 10}],[{"timeBucket": 222, "errors": 30}],[{"timeBucket": 333, "errors": 20}]];
var data = $.map(x,function(x,i){
return x[0];
});
$('#results').html(JSON.stringify(data));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='results'>