1 回答

TA貢獻1859條經驗 獲得超6個贊
PHP 的其余問題是:
1)您沒有使用循環來創建行數組,而是嘗試對 Mysqli 結果集進行編碼。它不直接包含行數據,必須獲取它(這就是循環while的目的)。
2) 你還在輸出 HTML,這會在 JavaScript 代碼試圖讀取你的響應時混淆它(并假設 - 它應該 - 它可以將其全部視為 JSON)
3) 你沒有回顯編碼的 JSON——事實上你根本沒有對它做任何事情。
這應該更好用:
$results = []; //new blank array ready for populating with row data
while($res = mysqli_fetch_array($result_set)) {
$results[] = array(
"date" => $res["date"],
"temperature" => (int) $res["temperature"],
"pressure" => (int) $res["pressure"],
"rpm" => (int) $res["rpm"],
); //add the necessary fields from the newly fetched row data into the results array
}
echo json_encode($results); //encode the array, and then echo the result so that it goes into the response for the JavaScript to read.
我也不知道你在哪里找到 JavaScript,但它似乎使事情過于復雜,或者期望從服務器獲得更復雜的結果集,而且在某些地方它并不完全有意義 - 我不認為即使使用它預期的數據集它也能正常工作。
因此,請將 getData 函數替換為:
async function getData() {
let response = await fetch("http://localhost:8000/read.php");
let json = await response.json();
var data = new google.visualization.DataTable();
data.addColumn('string', 'date');
data.addColumn('number', 'temperature');
data.addColumn('number', 'pressure');
data.addColumn('number', 'rpm');
//loop through the data and add a table row and a chart row for each row received from the server
for (var i = 0; i < json.length; i++) {
addRow(json[i]);
data.addRow(Object.values(json[i]));
}
var options = {
chart: {
title: 'Sensor Data',
subtitle: ''
},
width: 1045,
height: 500
};
var chart = new google.charts.Line(document.getElementById('linechart_material'));
chart.draw(data, google.charts.Line.convertOptions(options));
}
然后用這個版本替換 addRow 函數:
function addRow(data) {
let tBody=document.getElementById("sensorData");
let row=tBody.insertRow(-1);
let cell=row.insertCell(-1);
let dateTextNode=document.createTextNode(data.date);
cell.appendChild(dateTextNode);
cell=row.insertCell(-1);
let temperatureTextNode=document.createTextNode(data.temperature);
cell.appendChild(temperatureTextNode);
cell=row.insertCell(-1);
let pressureTextNode=document.createTextNode(data.pressure);
cell.appendChild(pressureTextNode);
cell=row.insertCell(-1);
let rpmTextNode=document.createTextNode(data.rpm);
cell.appendChild(rpmTextNode);
}
- 1 回答
- 0 關注
- 135 瀏覽
添加回答
舉報