Конфликт обработки 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);
то график строится. В чем причина? Неужели и правда конфликт с библиотекой? Ведь точно такой же парсинг ниже работает. |
SergeyAndSmart,
у вас есть success в нём всё и делайте Цитата:
|
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();
}
});
});
|
рони, спасибо, понял. data, возвращаемая AJAX у меня выглядит так:
Как мне дальше с JSON данными работать? Пробовал получить длину массива dht22 так data.dht22.lenght не работает. Так тоже значения не получает data.dht22[0].temperature. |
SergeyAndSmart,
возможно так строка 15 data: data.dht22 |
рони, не так не работает, там надо для 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);
|
SergeyAndSmart,
укажите тип JSON в ajax либо jQuery.getJSON() либо в параметрах $.ajax dataType: 'json', |
рони, огромнейшее спасибо, все работает!
|
| Часовой пояс GMT +3, время: 16:27. |