2013-10-25 3 views
0

Я использую javascript для отображения серии диаграмм (графиков) один под другим. Сценарий Javascript запрашивает данные из PHP-скрипта, затем рисует диаграммы и отображает его. Это не займет много времени, чтобы получить данные для одной диаграммы и сравнить их, но со многими графиками время накапливается, что скучно. Я хотел бы отобразить первый график, когда он будет готов, а затем второй график и т. Д., Поэтому пользователь увидит, как они динамически добавляются на страницу, делая страницу длиннее и длиннее.Динамическое добавление содержимого

В основном вот что у меня есть:

<script> 
var i=0; 
$.getJSON('stats.php', function (data) { 
    for (chartData in data) { 
     i++; 
     var chart = new AmStockChart(); 
     dataSet.dataProvider = chartData; 
     // etc. etc. 

     $('#stats').append('div id="chartdiv' + i + '"></div>'); 
     chart.write("chartdiv" + i); 
    } 
}); 
</script> 

<div id="stats"></div> 

Это производит около 10 графиков друг под другом, но проблема в том, что показывает пустой экран в течение 3-5 секунд, а затем отображает все графики сразу. Если я ограничу его, чтобы развернуть только один график, он проявляется намного быстрее. Было бы неплохо показать эти графики постепенно по очереди, когда каждый график будет готов.

UPD: Вот jsfiddle Я поместил тестовые данные и проехал по одному графику 20 раз.

+0

на самом деле, что 3-5 сек для извлечения data.Once его неправдоподобным его отображения. Anywaz может создать jsfiddle для кода ur – iJade

+0

Хорошо, просто добавил jsfiddle, чтобы опубликовать – user164863

+0

ok..just добавил ответ с демо ... – iJade

ответ

1

Некоторые вещи вдоль линий это должно помочь .....

var i = 0; 
$.getJSON('stats.php', function (data) { 
    for (chartData in data) { 
     i++; 
     setTimeout(function(index,d1){ 
      return function() { 
        var chart = new AmStockChart(); 
        dataSet.dataProvider = data[d1]; 
        // etc. etc. 

        $('#stats').append('div id="chartdiv' + index + '"></div>'); 
        chart.write("chartdiv" + index); 
      } 
     }(i,chartData), 3000*i); 
    } 
}); 

Вот demo

+0

Хм ... Я чувствую, что это очень близко, но этот добавляет пустые divs все с тот же идентификатор – user164863

+0

обновленный код с демонстрацией .... посмотрите – iJade

+0

Спасибо за ваш хелл п. Да, наверное, так и должно быть. Однако я начал ставить это на свой код, который имеет несколько графиков в массиве и выяснил, что ваша демонстрация все время выводит только последний график. Я изменил пример jsfiddle и добавил два массива в массив. Вы можете увидеть это здесь [ссылка] (http://jsfiddle.net/fbKSa/14/), что повторяется только последний график. – user164863