我的javascript中有一些错误,我似乎无法弄明白。我正在通过MySql查询创建汽车对象。此外,我将这些对象存储到一个数组(carArray
)。
稍后我尝试访问这些对象时似乎出现问题。在这个例子中,我想在表中呈现对象。
function AddTableOfCars(){
// Table headers
var heading = new Array();
heading[0] = "Merke";
heading[1] = "Reg.nr.";
heading[2] = "Sist endret";
// Database connection
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'db_host',
user : 'db_user',
password : 'db_password',
database : 'db_name'
});
// Empty array to store cars
var carArray = [];
connection.connect();
var stmt = 'SELECT `VehicleID`,`VehicleMake`,`LicenseNumber`,`IsActive`,`DateChanged` FROM `db_table`';
connection.query(stmt, function (error, rows, fields) {
if (error) console.log(error.code);
else {
// Loop through query result
// Create car objects
// Store car objects in array
for (var i = 0; i < rows.length; i++) {
var carObj = new Car(rows[i].VehicleID, rows[i].VehicleMake, rows[i].LicenseNumber, rows[i].IsActive, rows[i].DateChanged);
carArray.push(carObj);
}
}
});
connection.end();
// Table columns
var table = document.getElementById('car-table');
for (var i = 0; i < carArray.length; i++) {
var row = table.insertRow(i);
var cellMake = row.insertCell(0);
var cellLicense = row.insertCell(1);
var cellDateChanged = row.insertCell(2);
cellMake.innerHTML = carArray[i].VehicleMake;
cellLicense.innerHTML = carArray[i].LicenseNumber;
cellDateChanged.innerHTML = carArray[i].DateChanged;
}
// Logs for debugging purposes
console.log(carArray);
console.log(carArray[0]);
}
我的console.log(carArray);
在控制台中返回以下内容:
[]
0:汽车
1:汽车
长度:2
到目前为止,它似乎加起来了。但是,当我尝试使用console.log(carArray[0]);
访问数组中的一个对象时,它会返回undefined
。
此时有没有人对我有任何指示。它很可能只是我错过的一个小细节。但是我一直在看我的代码很长一段时间了,我开始看动物而不是代码...
非常感谢任何帮助。
答案 0 :(得分:0)
我认为您可能遇到了一些异步问题。看看是否对此进行排序:
function AddTableOfCars() {
let tableHeaders = ["Merke", "Reg.nr.", "Sist endret"];
let mysql = require('mysql');
let stmt = 'SELECT `VehicleID`,`VehicleMake`,`LicenseNumber`,`IsActive`,`DateChanged` FROM `db_table`';
let connection = mysql.createConnection({
host: 'db_host',
user: 'db_user',
password: 'db_password',
database: 'db_name'
});
connection.connect();
connection.query(stmt, function (error, rows) {
if (error) {
console.log(error.code);
} else {
let carArray = [];
rows.forEach(row => {
carArray.push(new Car(row.VehicleID,
row.VehicleMake,
row.LicenseNumber,
row.IsActive,
row.DateChanged));
});
buildTable(carArray);
}
});
connection.end();
}
function buildTable(carArray){
// Table columns
var table = document.getElementById('car-table');
carArray.forEach(car => {
var row = table.insertRow(i);
var cellMake = row.insertCell(0);
var cellLicense = row.insertCell(1);
var cellDateChanged = row.insertCell(2);
cellMake.innerHTML = car.VehicleMake;
cellLicense.innerHTML = car.LicenseNumber;
cellDateChanged.innerHTML = car.DateChanged;
});
}
注意:我看不到您对tableHeaders
的使用,但无论如何我都将其留下了。