Подгрузка графиков jqplot в div на ajax. Не рисует график
Привет!
У меня тут проблема, которая скорее всего уже решалась, но она решалась на уровне jQuery, а у меня немного другой уровень абстракции. История такая: Есть index.php и есть graphics/calls.php На первой страничке есть div, в который я подгружаю содержимое graphics/calls.php так: var xhrCalls = new XMLHttpRequest(); // Создаем запрос графика по звонкам xhrCalls.open('POST', '/a/graphics/calls.php', true); xhrCalls.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhrCalls.onreadystatechange = function() { // Когда пришел ответ if (xhrCalls.readyState != 4) return; if (xhrCalls.status==200) { // Поднимаем флаг: графики загружены graphicStatus=1; calls.innerHTML = xhrCalls.responseText; // Отправляем страничку в div var arr = calls.getElementsByTagName('script'); // Выделяем все скрипты внутри div id='calls' for (n=0; n<arr.length; n++) { eval(arr[n].innerHTML); // Запускаем все скрипты } test(); // alert("ВСЕ РАБОТАТЬ ДОЛЖНО!"); draw(); // Рисование графика } } xhrCalls.send(post); // Отправляем запрос Без подгрузки graphics/calls.php прекрасно работает и рисует графики. Функция test, которая выводит алерт тоже работает. А вот функция draw, которая использует jQuery библиотеку jqPlot ничего не делает. Отсюда есть у меня подозрение, что это связано с какими-то jQuery заморочками. Сам я пользуюсь только нативным JS и в jQuery не бум бум, пришлось использовать только графиков ради. Вот функция рисования: <script class="code" type="text/javascript" language="javascript"> <?php foreach($managers as $k => $manager) { // Создаем по массиву данных на каждого менеджера echo("var manager$k=["); // Создаем массив данных для текущего менеджера echo($manager['calls']); echo("];"); } echo ("var complex=["); // Отправляем все в один массив foreach($managers as $k => $manager) { if ((int)$manager['phone_code']>100) { echo ("manager$k,"); } } echo ("];"); foreach($managers as $k => $manager) { if ((int)$manager['phone_code']>100) { $names=$names."{label: '".$manager['name']."'},"; } } ?> function draw() { var plot1 = $.jqplot('chart1', complex, { title:'Звонки за последние 30 дней', legend: { renderer: $.jqplot.EnhancedLegendRenderer, show: true, placement: 'outsideGrid', location: 's', rendererOptions: {numberColumns: 6, numberRows: 0} }, axes:{ xaxis:{ renderer:$.jqplot.DateAxisRenderer, tickOptions:{formatString:'%d.%m'}, tickInterval:'1 day' }, yaxis:{ pad: 0.4, } }, seriesDefaults: { rendererOptions: { smooth: true, }, showMarker: true, }, series:[ <?php echo($names); ?> ] }); }; </script> Все скрипты, либы и прочее подгружается на нужную страницу. Кто-нибудь сталкивался с подобными проблемами? Как это вообще можно решить? Буду весьма благодарен за помощь! |
это просто яростный говнокод, основанный на полном непонимании программирования на джаваскрипт.
во-1, не нужно пользовать XMLHttpRequest(); когда есть жКвери - у него там есть аякс, который делает то же, но с более простой оберткой. во-2, не нужно пихать серверный код типа <?php echo($names); ?> абы как и абы куда. Этот метод катит если единичную переменную в джаваскрипт зафутболить, но с массивом несколько сложнее. во-3, нужно правильно поставить задачу. То, что есть такой-то код, сякой-то код, это хорошо, но -- в чем задача? Какая стоит цель?.. |
Посмотри нет ли ошибок в консоли, в функции draw() поставь console.log(1) в начале и посмотри выведет ли. Убедись что элемент chart1 создан.
А вот эти шаги мне совершенно не понятны: var arr = calls.getElementsByTagName('script'); // Выделяем все скрипты внутри div id='calls' for (n=0; n<arr.length; n++) { eval(arr[n].innerHTML); // Запускаем все скрипты } Нафега? Я может чего то не понимаю, но после вставки на страницу эти скрипты и без того выполняются самостоятельно. |
Часовой пояс GMT +3, время: 00:16. |