Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.01.2015, 15:07
Новичок на форуме
Отправить личное сообщение для Asondo Посмотреть профиль Найти все сообщения от Asondo
 
Регистрация: 30.01.2015
Сообщений: 1

Подгрузка графиков 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>


Все скрипты, либы и прочее подгружается на нужную страницу. Кто-нибудь сталкивался с подобными проблемами? Как это вообще можно решить?

Буду весьма благодарен за помощь!
Ответить с цитированием
  #2 (permalink)  
Старый 31.01.2015, 00:18
Аватар для deivan
Профессор
Отправить личное сообщение для deivan Посмотреть профиль Найти все сообщения от deivan
 
Регистрация: 02.08.2012
Сообщений: 293

это просто яростный говнокод, основанный на полном непонимании программирования на джаваскрипт.
во-1, не нужно пользовать XMLHttpRequest(); когда есть жКвери - у него там есть аякс, который делает то же, но с более простой оберткой.
во-2, не нужно пихать серверный код типа <?php echo($names); ?> абы как и абы куда. Этот метод катит если единичную переменную в джаваскрипт зафутболить, но с массивом несколько сложнее.
во-3, нужно правильно поставить задачу. То, что есть такой-то код, сякой-то код, это хорошо, но -- в чем задача? Какая стоит цель?..
Ответить с цитированием
  #3 (permalink)  
Старый 02.02.2015, 09:07
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Посмотри нет ли ошибок в консоли, в функции draw() поставь console.log(1) в начале и посмотри выведет ли. Убедись что элемент chart1 создан.

А вот эти шаги мне совершенно не понятны:
var arr = calls.getElementsByTagName('script'); // Выделяем все скрипты внутри div id='calls'
for (n=0; n<arr.length; n++) {
   eval(arr[n].innerHTML); // Запускаем все скрипты
}

Нафега? Я может чего то не понимаю, но после вставки на страницу эти скрипты и без того выполняются самостоятельно.

Последний раз редактировалось krasovsky, 02.02.2015 в 09:25.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подгрузка страниц AJAX и гугл карта, карта не подгружается gumapumba Общие вопросы Javascript 1 25.09.2015 16:25
Книги по Ajax BaVa Учебные материалы 18 18.08.2013 14:05
Какой фреймворк выбрать? нужно а) компоненты формы б) ajax подгрузка объектов ... plazzzm Библиотеки/Тулкиты/Фреймворки 5 05.02.2013 17:41
Послать форму загруженную через ajax в div используя ajax ncux jQuery 2 16.08.2010 17:36
Подгрузка контента в определённый DIV при нажатии на ссылку, без перезагрузки страниц Flashton Events/DOM/Window 0 10.03.2010 19:53