2014-01-02 2 views
0

Я действительно застрял здесь, пытаясь окунуться в высокие диаграммы в сочетании с циклами getjson и javascript (это следует из предыдущего вопроса - How to generate highcharts chart from multiple local json files).Использование функции addChart для высоких чартов в вызове getJSON (цикл по нескольким локальным файлам)

По сути, я пытаюсь создать бархат с высоким диагонали, который содержит несколько категорий и серий. У меня есть несколько локальных json-файлов, каждый из которых содержит подсчеты различной информации. Я хочу прокрутить каждый файл категории, прочитать счетчик и добавить результат в эту конкретную серию (а затем нарисовать ее). Я использую $ .getJSON внутри цикла, который перебирает файлы (я думаю, что теперь у меня это работает, обернув его в функцию (см. Код ниже)). Тем не менее, я также пытаюсь использовать «chart.addSeries» в highchart, чтобы добавить каждую новую серию в диаграмму (т. Е. Номер сериала в коде). То, как я его закодировал в настоящее время, означает, что мне нужно вернуть номер сериала обратно из вызова getJSON - я знаю, что это неверно и вместо этого нужно выполнить дальнейшую обработку внутри вызова getJSON. И это та часть, где я застрял - я не уверен, как я могу справиться с добавлением новых серий внутри вызова getJSON как часть эволюционирующего добавления нескольких серий.

Надеюсь, что это имеет смысл, и, возможно, сам код поможет.

(Просто добавить, что большая часть кода, кажется, работает, как ожидалось - это заключительная часть, что я не могу понять)

Спасибо за любые советы.

$(document).ready(function() { 

    var options = { 
    // standard highcharts options set here.... 
     series: [] 
    }; 

    //the series to loop through    
    var fileTypes = new Array('SeriesTypeA', 
        'SeriesTypeB'); 

    //the categories to loop through          
    var mfiles = new Array('/assets/Cat1.json', 
       '/assets/Cat2.json', 
       '/assets/Cat3.json', 
       '/assets/Cat4.json', 
       '/assets/Cat5.json', 
       '/assets/Cat6.json', 
       '/assets/Cat7.json'); 

    //plot the initial empty chart    
    var chart = new Highcharts.Chart(options); 


    //Loop over the different files and do a count for each 
    for (var i=0; i<fileTypes.length; i++) { 
     var seriescount = []; 
     for (var j=0; j < mfiles.length; j++) { 

      (function(i, j, seriescount){ //force the local i and j 
       $.getJSON(mfiles[j], function(data) { 
        // get the count of files 
        var count = 0; 
        var index = 0; 
        var entry; 
        for (index = 0; index < data.length; ++index) { 
         entry = data[index]; 
         if (entry.file_processing_status == fileTypes[i]) { 
          count ++; 
         } 
        }; 
        seriescount.push(count); 
        return seriescount; //This is not correct 
       }); 

      })(i, j, seriescount); 
     } 

     //add the results to make a new series    
     chart.addSeries({       
      name: fileTypes[i], 
      data: seriescount //as expected I don't get seriescount at this stage 
     }, false);    
    }; 

    //and now redraw the final chart   
    chart.redraw(); 

}); 

ответ

1

Что вызывает беспокойство, что это эта линия: $.getJSON(mfiles[j], function(data) { - это будет означать, что вы загружаете для каждой серии (for с i переменной) тот же файл. Для меня это странно.

Теперь о решении, каждая серия имеет фиксированное количество категорий, не так ли? Он находится в переменной mfiles.length. Вы можете увеличить счетчик и добавить это (внутри обратного вызова getJSON):

if(categoryCounter == mfiles.length){ 
    chart.addSeries(series); 
} 
+0

Спасибо, Пауэл, это то, что мне нужно. С помощью этого счетчика он работает так, как я хотел. Я буду работать над очисткой кода в отношении ваших первых комментариев. – GerryDevine

Смежные вопросы