2013-03-19 62 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