2013-03-19 52 views
0

我相当关于JS新手,所以这可能是一个愚蠢的问题...排行榜与jQuery.ajax:如何初始化/范围问题

我尝试做一个排行榜主/图(见样品http://jsfiddle.net/VhqaQ/)。该data阵列应该充满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(); 
    }); 
}); 

但是像这样的图表保持为空。这是data阵列的范围问题吗?或者当new Highcharts.Chart(...)被调用时,data尚未初始化?

我测试了ajax部分 - 数据填写正确。所以这不是问题...

也许我应该把ajax调用的其他地方?

回答

1

在$ .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 
      }], 
     }); 
    } 
+0

我不明白为什么数据没有全局范围......它与createMaster和ajax调用的声明级别相同。 – rantanplan 2013-03-19 19:04:23

+0

@rantanplan我以前没有看到你的初始化变量。我道歉。我必须不小心向下滚动太远。这就是说,仅仅因为变量存在并不意味着数据集已经被返回。最安全的做法是在100%确定您的呼叫已解决后调用您的方法,这是您的ajax异步调用的回调。我会更新我的答案以删除该违规行。 – 2013-03-19 19:06:45

+0

非常感谢,现在我明白了:这是一个计时问题......! – rantanplan 2013-03-19 19:13:11