У меня был этот код, работающий несколько лет назад, и недавно я вернулся к нему, у меня есть javascript, обновляющий данные на веб-странице. Я звоню на сервер с помощью JSON и получаю обратно, что я думаю, все в порядке
Мой код базы данных Python, который, кажется, работает нормально.
cur = db.execute('select sensor_name, temp from cur_temps ORDER BY sensor_name')
return jsonify(cur.fetchall())
Получил Json
[["BoilerRoom",24.94],["Cylinder1",49.94],["Cylinder2",42.38],["Cylinder3",41.88],["Sensor1",85],["SolidFuelFlow",59],["SolidFuelReturn",41.62]]
Я пытаюсь получить число, которое связано с Cylinder2 = 42,38
Мой код JS, который работал ранее, выглядит следующим образом
<script type=text/javascript>
function get_temps() {
$.getJSON("_status",
function (data) {
$('#CylTop').text(data.Cylinder1 + "°")
$('#CylMid').text(data.Cylinder2 + "°")
$('#CylBot').text(data.Cylinder3 + "°")
$('#Solid_flow').text(data.SolidFuelFlow)
$('#Solid_return').text(data.SolidFuelReturn)
$('#BRoom').text(data.BoilerRoom);
console.log(data)
console.log(data.Cylinder1)
}
);
}
setInterval('get_temps()', 5000);
</script>
Консоль показывает (данные) нормально в браузере, когда я пытаюсь показать что-нибудь еще. 'console.log(data.Cylinder1)', который показывает неопределенный. Я новичок, поэтому я предполагаю, что индексирование должно происходить как массив, но я немного потерян. Любое руководство будет с благодарностью.
Большое спасибо
C Dabbs
Похоже, вы обращаетесь к свойствам data
как к объекту. Согласно ответу, это массив внутри массива. Таким образом, вам придется сгладить его, прежде чем получить доступ к нему, как у вас есть.
function get_temps() {
$.getJSON("_status",
function(data) {
let flattendData = data.reduce(function(acc, item) {
return Object.assign({}, acc, {
[item[0]]: item[1]
});
}, {});
$('#CylTop').text(flattendData.Cylinder1 + "°")
$('#CylMid').text(flattendData.Cylinder2 + "°")
$('#CylBot').text(flattendData.Cylinder3 + "°")
$('#Solid_flow').text(flattendData.SolidFuelFlow)
$('#Solid_return').text(flattendData.SolidFuelReturn)
$('#BRoom').text(flattendData.BoilerRoom);
console.log(flattendData)
console.log(flattendData.Cylinder1)
}
);
}