#php #ajax #chart.js2
#php #ajax #chart.js2
Вопрос:
У меня есть простой вызов ajax, который загружает страницу php. Я использую chart.js для построения гистограммы на основе динамических данных MySQL.
Если я перейду на эту страницу напрямую, она будет работать нормально. Однако, если я использую следующий код для загрузки страницы, данные на странице загружаются, а диаграмма — нет.
Скрипт, который я использую для вызова ajaxtest.php страница находится в index.php страница:
<script>
function getProduct(str) {
if (str == "") {
document.getElementById("txtHint").innerHTML = "";
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7 , Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 amp;amp; this.status == 200) {
document.getElementById("loader").innerHTML = ''; // Hide the image after the response from the server
document.getElementById("txtHint").innerHTML = this.responseText;
}
};
document.getElementById("loader").innerHTML = '<img src="imgs/loader.gif" />'; // Set here the image before sending request
xmlhttp.open("GET","ajaxTest.php?prod=" str,true);
xmlhttp.send();
}
}
</script>
В этом файле у меня есть bootstrap.css, загруженный в раздел head. В нижней части страницы, которую я загружаю jquery.js , bootstrap.js и некоторые customizations.js файлы (в таком порядке). Если я удалю их из index.php страница, это не имеет никакого значения, и диаграмма по-прежнему не загружается.
На ajaxtest.php страница у меня есть, она также вызывает одни и те же файлы в одних и тех же местах.
Я подумал, что это может быть моей проблемой, поэтому, когда я удалил их из своего index.php страница по-прежнему не загружается.
Я озадачен тем, почему он не загружается при вызове его через ajax, но загружается, когда я нажимаю на него напрямую. Я не вижу никаких ошибок в firebug / developer tools.
Любые мысли вообще будут оценены.
Комментарии:
1. Проблема в том, что chart.js (любой другой подобный плагин) делает это после загрузки (исходного) документа. Что вам нужно сделать, это сделать chart.js сделайте то же самое еще раз, как только ваш динамически вставленный HTML-код будет отрисован.
2. @jeff Любое направление о том, как я это сделаю? Спасибо!
3. у вас должно быть где-то что-то вроде
var myChart = new Chart($("#myChart"), {...});
. Затем это должно быть вызвано после того, как ‘#MyChart’ вставлен в DOM, так чтоonreadystatechange
.4. Если вы опубликуете более релевантный код (результат
ajaxtest.php
того, как вы инициализируете диаграмму, ..) Я мог бы помочь больше, теперь я могу только догадываться.5. @Jeff — у меня есть инициализация диаграммы внизу страницы после тега div для #mychart . Странная часть в том, что когда я нажимаю ajaxtest.php непосредственно страница нормально загружается с chart.js инициализация, как и ожидалось. Позвольте мне скинуть страницы в pastebin или что-то в этом роде и поместить ссылку, чтобы вы могли ее увидеть. Я уверен, что я делаю что-то глупое.