Здравствуйте, написал скрипт, который из таблицы mysql загружает данные в google charts к элементам выбора даты подвязал события и они отлично работают, диаграмма загружается и видоизменятся в зависимости от даты и времени Проблема в том , что после загрузки страницы я хочу что бы сразу загружалась диаграмма по данным по умолчанию но ее нет . В консоле пишется Код (Text): Uncaught TypeError: google.visualization is undefined drawChart aac_dev99.php:67 <anonymous> aac_dev99.php:23 вот эта строка Код (Text): var data = google.visualization.arrayToDataTable(jsondata); с номером 67 Вот полный код страницы. Код (Text): <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <title> =====</title> <meta charset="utf-8"> <script src='//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'></script> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <form method='POST'> <?php //$today = date("Y-m-d H:i:s"); $today = date("Y-m-d"); $ntoday=$today." 00:00:00"; $ktoday=$today." 23:59:00"; if (isset($_POST['ndate'])) {$ndate=$_POST['ndate'];} else {$ndate=$ntoday;} echo "C "."<input type=datetime name=ndate id=ndate value= '$ndate' >"; if (isset($_POST['kdate'])) {$kdate=$_POST['kdate'];} else {$kdate=$ktoday;} echo "по <input type=datetime name=kdate id=kdate value='$kdate'>"; $mname="Включить"; $chkstate = file_get_contents('pomidor.txt', FALSE, NULL, 3, 1); echo $chkstate; if (checkstate==')') {echo "<input type= 'checkbox' id='checkrep' name='chkrep' value=1>".$mname; echo $chkstate;echo "<br>"; } else {echo "<input type= 'checkbox' id='checkrep' name='chkrep' value=0>".$mname; echo $chkstate;echo "<br>";} echo "<br>"; $ndata = $_POST['ndate'];$kdata = $_POST['kdate']; ?> </form> <script> $(document).ready(function(){ alert("вход"); var sendData = $(this).closest('form').serialize(); var dtochart = $.ajax({ url: "gchart.php", data:sendData, dataType: "text", type: 'POST', async: false }).responseText; drawChart(dtochart); }) $('#ndate').on('change', function() { var sendData = $(this).closest('form').serialize(); var dtochart = $.ajax({ url: "gchart.php", data:sendData, dataType: "text", type: 'POST', async: false }).responseText; drawChart(dtochart); ///alert (ttt); }); $('#kdate').on('change', function() { var sendData = $(this).closest('form').serialize(); var dtochart = $.ajax({ url: "gchart.php", data:sendData, dataType: "text", type: 'POST', async: false }).responseText; drawChart(dtochart); ///alert (ttt); }); $(':checkbox').on('change', function() { var sendData = $(this).closest('form').serialize(); var ttt = $.ajax({ url: "rep.php", data:sendData, dataType: "text", type: 'POST', async: false }).responseText; ///alert (ttt); }); </script> <!-- This loads the 'corechart' package. --> <script type="text/javascript"> google.charts.load('current', {'packages':['corechart']}); google.charts.setOnLoadCallback(drawChart); function drawChart(jsondata) { jsondata = eval('(' + jsondata + ')'); console.log(jsondata); var data = google.visualization.arrayToDataTable(jsondata); // Curved line var options = { title: 'Temperature', curveType: 'function', legend: { position: 'bottom' } }; // Curved chart var chart = new google.visualization.LineChart(document.getElementById('curve_chart')); chart.draw(data, options); } // End bracket from drawChart </script> <div id="curve_chart" style="width: 900px; height: 480px;"></div> <p>Last line in html</p> <!-- For debugging --> </html> в чем может быть проблема. Подскажите плиз.
отвечу сам себе. Вот нашел решение https://stackoverflow.com/questions/21659671/typeerror-google-visualization-is-undefined Код (Text): Yes, it seems that package was not fully loaded when arrayToDataTable was called. At least for the first chart. Но в моем случае это мало что решает, тем не менее хорошая диагностика это уже полдела.
так на момент открытия страницы у вас в jsondata есть ли что-то? наверняка нет... а надо чтоб было ) и таки к PHP не имеет отношения вопрос
понял, я должен загрузить переменную jsondata до момента $(document).ready(function(){}. правильно? С тем чтобы задать начальную инициализацию графиков.