Вопрос или проблема
Извините, я новичок в JavaScript и не понимаю, как передать необходимые данные.
Вот мой AJAX-запрос:
$(document).ready(function (){
loadSkiResortData();
});
function loadSkiResortData(){
$.ajax({
method: 'GET',
url: '/admin/sknowed/loadSkiResortData',
success: function(response){
console.log(typeof response.weatherData);
const obj = JSON.parse(response.weatherData);
console.log(obj.hourly.temperature_2m);
console.log(obj.hourly.time);
}
});
}
Вышеуказанный код возвращает “температуру” (obj.hourly.temperature_2m) и дату/время (obj.hourly.time). Температура и дата/время должны быть переданы в chart.js следующим образом:
const ctx = document.getElementById('myChart');
new Chart(ctx,
{
type: 'line',
data:
{
labels: // Я хочу заменить этот массив на obj.hourly.time
[
'Красный',
'Синий',
'Жёлтый',
'Зелёный',
'Фиолетовый',
'Оранжевый'
],
datasets:
[
{
label: 'Метка моего графика',
data: [12, 19, 3, 5, 2, 3], // Я хочу заменить этот массив на obj.hourly.temperature_2m
borderWidth: 1
}
]
},
}
Я хочу, чтобы массив labels равнялся obj.hourly.time, а массив data равнялся obj.hourly.temperature_2m.
Извините, но я буду благодарен за любые советы, пожалуйста.
Ответ или решение
Конечно! Ниже приведен полный ответ на ваш вопрос о том, как передать данные из AJAX-запроса в другую часть вашего кода JavaScript, в частности, в Chart.js.
Ваш текущий код загружает данные с помощью AJAX и извлекает температуры и временные метки. Давайте мы изменим ваш код так, чтобы он передавал эти данные в конфигурацию Chart.js.
Ваша функция loadSkiResortData
будет обновлена, чтобы встраивать данные непосредственно в создание графика. Вот пример, как это можно сделать:
$(document).ready(function (){
loadSkiResortData();
});
function loadSkiResortData() {
$.ajax({
method: 'GET',
url: '/admin/sknowed/loadSkiResortData',
success: function(response) {
console.log(typeof response.weatherData);
const obj = JSON.parse(response.weatherData);
// Теперь мы можем использовать obj.hourly.time и obj.hourly.temperature_2m
const timestamps = obj.hourly.time; // Массив временных меток
const temperatures = obj.hourly.temperature_2m; // Массив температур
// Вызываем функцию для создания графика с полученными данными
createChart(timestamps, temperatures);
},
error: function(xhr, status, error) {
console.error("Ошибка AJAX-запроса:", status, error);
}
});
}
function createChart(labels, data) {
const ctx = document.getElementById('myChart');
new Chart(ctx, {
type: 'line',
data: {
labels: labels, // Заменяем метки на массив временных меток
datasets: [
{
label: 'Температура',
data: data, // Заменяем данные на массив температур
borderWidth: 1
}
]
},
options: {
responsive: true,
plugins: {
legend: {
display: true
},
title: {
display: true,
text: 'График температур'
}
}
}
});
}
Объяснение кода:
-
Основная структура: Как и раньше, при загрузке страницы вызывается функция
loadSkiResortData()
, которая делает AJAX-запрос. -
Успех запроса: В случае успешного ответа данные разбираются и помещаются в переменные
timestamps
иtemperatures
. -
Создание графика: После извлечения данных вызывается функция
createChart
, которая принимает массивы со временными метками и температурами. -
Функция createChart: Здесь создается новый экземпляр Chart.js, где данные меток и температур передаются непосредственно в объект данных графика.
-
Обработка ошибок: Я добавил обработку ошибок, чтобы быть в курсе возможных проблем с AJAX-запросом.
Теперь ваш график будет правильно отображать данные из API. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!