Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Конфликт обработки JSON и библиотеки Canvasjs (https://javascript.ru/forum/library-toolkit-framework/64251-konflikt-obrabotki-json-i-biblioteki-canvasjs.html)

SergeyAndSmart 30.07.2016 00:17

Конфликт обработки JSON и библиотеки Canvasjs
 
Здравствуйте. Для построения графика использую библиотеку Canvasjs. Но сначала я получаю JSON AJAX запросом и потом его парсю.
$.ajax({  
            url: "read_mysql.php",  
            cache: false,  
            success: function(html){  
				$("#content").html(html);
            }  
        });   
		
	var json = document.getElementById("content").innerHTML;
	var data_json = JSON.parse(json);
	alert("test");

Далее идет код построения графика (код взят с библиотеки)
window.onload = function () {	  
    var chart = new CanvasJS.Chart("chartContainer",
	{
		zoomEnabled: true,
		title:{
			text: "График температуры в комнате"
    },
		axisY:{
		includeZero: false
	},
		data: data,  
    });
    chart.render();
   }
   
    var limit = 1000;

    var y = 0;
    var data = []; var dataSeries = { type: "line" };
    var dataPoints = [];
    for (var i = 0; i < limit; i += 1) {
        y += (Math.random() * 10 - 5);
         dataPoints.push({
          x: i - limit / 2,
          y: y
           });
        }
     dataSeries.dataPoints = dataPoints;
     data.push(dataSeries);

Код построения графика в таком случае не работает, как и не выполняется alert(). Однако, если удалить из кода эти две строчки
var json = document.getElementById("content").innerHTML;
var data_json = JSON.parse(json);
то график строится. В чем причина? Неужели и правда конфликт с библиотекой? Ведь точно такой же парсинг ниже работает.

рони 30.07.2016 00:33

SergeyAndSmart,
у вас есть success в нём всё и делайте
Цитата:

Сообщение от SergeyAndSmart
В чем причина?

в том что эти строки должны быть в success и парсить ничего ненадо если у вас действительно JSON

рони 30.07.2016 00:41

SergeyAndSmart,
примерно так
$(function() {
$.ajax({
            url: "read_mysql.php",
            cache: false,
            success: function(data){
var chart = new CanvasJS.Chart("chartContainer",
  {
    zoomEnabled: true,
    title:{
      text: "График температуры в комнате"
    },
    axisY:{
    includeZero: false
  },
    data: data,
    });
    chart.render();
            }
        });
});

SergeyAndSmart 30.07.2016 14:47

рони, спасибо, понял. data, возвращаемая AJAX у меня выглядит так:
Как мне дальше с JSON данными работать? Пробовал получить длину массива dht22 так data.dht22.lenght не работает. Так тоже значения не получает data.dht22[0].temperature.

рони 30.07.2016 15:29

SergeyAndSmart,
возможно так строка 15
data: data.dht22

SergeyAndSmart 30.07.2016 15:55

рони, не так не работает, там надо для x и y свои данные в массив data пихать и как я понимаю они не в формате JSON. Я про другое, как мне сделать data.dht22.lenght и т.д. вне построения графика и потом данные уже загнать в график этим кодом? Моя идея примерна такова:
var limit = data.dht22.lenght;
    var y = 0;
    var data = []; var dataSeries = { type: "line" };
    var dataPoints = [];
    for (var i = 0; i < limit; i++) {
          x: data.dht22[i].date;
          y: data.dht22[i].temperature;
           });
        }
     dataSeries.dataPoints = dataPoints;
     data.push(dataSeries);

рони 30.07.2016 15:59

SergeyAndSmart,
укажите тип JSON в ajax либо
jQuery.getJSON()

либо в параметрах
$.ajax
dataType: 'json',

SergeyAndSmart 30.07.2016 23:13

рони, огромнейшее спасибо, все работает!


Часовой пояс GMT +3, время: 12:07.