Javascript jQuery.ajax的高分:如何初始化/范围问题
关于JS我是个新手,所以这可能是个愚蠢的问题 我试着做一个高分的主/明细表(见示例)。Javascript jQuery.ajax的高分:如何初始化/范围问题,javascript,highcharts,Javascript,Highcharts,关于JS我是个新手,所以这可能是个愚蠢的问题 我试着做一个高分的主/明细表(见示例)。数据数组应填充jQuery.ajax调用: $(function () { var masterChart, detailChart, data=[], chatter=[], indizies=[]; $(document).ready(function() { $.ajax({ ur
数据
数组应填充jQuery.ajax调用:
$(function () {
var masterChart,
detailChart,
data=[],
chatter=[],
indizies=[];
$(document).ready(function() {
$.ajax({
url: 'index.php',
data: 'type=1363435001',
dataType: 'json',
success: function(json) {
data = json.range;
scatter = json.scatter;
indizies = json.indizies;
},
error: function (xhr, status, error) {
alert('Status: ' + status +' Error: ' + error);
}
});
// create the master chart
function createMaster() {
masterChart = new Highcharts.Chart({
.......
series: [{
type: 'columnrange',
name: 'Intervall',
pointInterval: 1,
pointStart: 0,
data: data
}],
});
}
........
createMaster();
});
});
但像这样,图表仍然是空的。这是数据
数组的范围问题吗?或者调用新的Highcharts.Chart(…)时,数据是否尚未初始化
我测试了ajax部分-数据填充正确。所以这不是问题所在
也许我应该把ajax调用放在其他地方?在$.ajax调用的回调中调用createMaster(),并将数据传递给它。
您目前假设在ajax调用初始化时,数据已经返回,但情况很可能并非如此。将函数调用放在回调函数中,确保数据存在
$.ajax({
url: 'index.php',
data: 'type=1363435001',
dataType: 'json',
success: function(json) {
data = json.range;
scatter = json.scatter;
indizies = json.indizies;
createMaster(data);
},
error: function (xhr, status, error) {
alert('Status: ' + status +' Error: ' + error);
}
});
// create the master chart
function createMaster(data) {
masterChart = new Highcharts.Chart({
.......
series: [{
type: 'columnrange',
name: 'Intervall',
pointInterval: 1,
pointStart: 0,
data: data
}],
});
}
我不明白为什么数据没有全局范围。。。它与createMaster和ajax调用在同一级别上声明。@rantanplan我以前没有看到您对变量的初始化。我道歉。我一定是不小心向下滚动太远了。也就是说,变量存在并不意味着数据集已经返回。最安全的做法是在100%确定调用已解决后调用方法,这是在ajax异步调用的回调中。我会更新我的答案,删除那句冒犯的话。非常感谢,现在我明白了:这是一个时间问题@兰坦普兰:确切地说:)这可能被称为“竞赛条件”。无论哪种方式,在异步编程中,我们使用回调来指示代码在其请求得到解决之前不要担心解析该特定函数。