Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用mysql数据库中的数据创建下拉列表?_Javascript_Html_Mysql_Node.js_Express - Fatal编程技术网

Javascript 如何使用mysql数据库中的数据创建下拉列表?

Javascript 如何使用mysql数据库中的数据创建下拉列表?,javascript,html,mysql,node.js,express,Javascript,Html,Mysql,Node.js,Express,因此,我有一个html表单,用户可以在其中选择一些选项。我想创建一个下拉列表,其中的数据将来自我的mysql数据库。 这些是我的文件: 忽略其他文件。Index.html是我的主页,我的表格是air-tickets.html 机票。html <form id="form-submit" method="post"> <div class="container" id="air-form-contai

因此,我有一个html表单,用户可以在其中选择一些选项。我想创建一个下拉列表,其中的数据将来自我的mysql数据库。 这些是我的文件:

忽略其他文件。Index.html是我的主页,我的表格是air-tickets.html
机票。html

<form id="form-submit" method="post">
    <div class="container" id="air-form-container">
        <div class="col-md-12">
            <label for="sel2" class="dropbar-label">Airline: </label>
            <select class="form-control airline-select" id="sel2" name="airline">
                <option value="none">Select airline</option>
            </select>
        </div>
    </div>
</form>
database.js

var express = require('express');
const path = require('path');
var air_tickets_router = express.Router();
const bodyParser = require('body-parser');

var db = require('../database');

air_tickets_router.use(bodyParser.json());

air_tickets_router.route('/')
    .get(function(req, res, next) {
        res.sendFile('air-tickets.html', { root: path.join(__dirname, '../public') });
    })
    .post(function(req, res, next) {
        console.log(req.body);
        console.log(req.body.sellist1);
        res.statusCode = 200;
        res.setHeader('Content-Type', 'application/json');
        res.redirect('/air-tickets');
    });

air_tickets_router.get('/get_airlines', function(req, res, next) {
    var sql = 'SELECT airline FROM flight ORDER BY airline';
    db.query(sql, function(err, data, fields) {
        if (err) throw err;
        res.render('airline-list', { title: 'Airline List', userData: data });
    });
});

module.exports = air_tickets_router;
const mysql = require('mysql');

var mysqlConnection = mysql.createConnection({
    host: "localhost",
    user: "myuser",
    password: "mypassword",
    database: "myproject",
    multipleStatements: true
});

mysqlConnection.connect(function(err) {
    if (err) throw err;
    console.log('Database is connected successfully !');
});

module.exports = mysqlConnection;
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

const mysqlConnection = require("./database")
const bodyParser = require('body-parser');

//Require routes
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var air_ticketsRouter = require('./routes/air_tickets');

var app = express();
app.use(bodyParser.json());

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

//Use the routes
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/air-tickets', air_ticketsRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.render('error');
});

module.exports = app;
和app.js

var express = require('express');
const path = require('path');
var air_tickets_router = express.Router();
const bodyParser = require('body-parser');

var db = require('../database');

air_tickets_router.use(bodyParser.json());

air_tickets_router.route('/')
    .get(function(req, res, next) {
        res.sendFile('air-tickets.html', { root: path.join(__dirname, '../public') });
    })
    .post(function(req, res, next) {
        console.log(req.body);
        console.log(req.body.sellist1);
        res.statusCode = 200;
        res.setHeader('Content-Type', 'application/json');
        res.redirect('/air-tickets');
    });

air_tickets_router.get('/get_airlines', function(req, res, next) {
    var sql = 'SELECT airline FROM flight ORDER BY airline';
    db.query(sql, function(err, data, fields) {
        if (err) throw err;
        res.render('airline-list', { title: 'Airline List', userData: data });
    });
});

module.exports = air_tickets_router;
const mysql = require('mysql');

var mysqlConnection = mysql.createConnection({
    host: "localhost",
    user: "myuser",
    password: "mypassword",
    database: "myproject",
    multipleStatements: true
});

mysqlConnection.connect(function(err) {
    if (err) throw err;
    console.log('Database is connected successfully !');
});

module.exports = mysqlConnection;
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

const mysqlConnection = require("./database")
const bodyParser = require('body-parser');

//Require routes
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var air_ticketsRouter = require('./routes/air_tickets');

var app = express();
app.use(bodyParser.json());

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

//Use the routes
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/air-tickets', air_ticketsRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.render('error');
});

module.exports = app;
我还有这个air\u tickets\u form.js在公共-->js文件中

const airlineSelect = document.querySelector("#sel2");

document.addEventListener("DOMContentLoaded", (event) => {
    fetch('http://localhost:3000/air-tickets/get_airlines')

    .then(req => req.json())
        .then(res => {
            for (let airline of res) {
                let airlineOption = document.createElement("option");
                console.log(airline);
                airlineOption.value = airline;
                airlineOption.innerHTML = airline;
                airlineSelect.appendChild(airlineOption);
            }
        })
        .catch(err => console.log(err));
});

通常,您可以在javascript中向select添加一个
,如下所示:

function addOption() {
  var select = document.getElementById("sel2"); //get your <select> by its ID
  var option = document.createElement("option"); // create a New <option>
  option.appendChild(document.createTextNode("Airline Name")); // provide <option> Text 
  option.setAttribute("id", "yourOptionID"); // giving your <option> an id
  select.appendChild(option); // add the created <option> to your <select>
}
函数addOption(){
var select=document.getElementById(“sel2”);//通过其ID获取
var option=document.createElement(“option”);//创建一个新的
option.appendChild(document.createTextNode(“航空公司名称”);//提供文本
option.setAttribute(“id”,“yourOptionID”);//为您的
select.appendChild(选项);//将创建的
}

现在,您只需循环查看数据库结果并添加所述的
选项
那么,您可以使用两种方法解决此问题:

1-第一种方法(不推荐) 您可以等待HTML页面加载,然后运行Javascript获取数据并将其转换为select标记下的选项

这正是你的air_tickets_form.js所做的,你所需要的就是在你的html中包含这个文件

只要在你身体的末端加上这条线

<script src="./js/air_tickets_form.js"></script>
玉变老了,现在换成了哈巴狗 您可以使用NPM安装它 然后用这个替换这一行

app.set('view engine', 'pug')
现在您正在使用视图引擎

然后需要将html转换为PUG语法

现在你可以使用在线转换器,比如这个

但我建议您阅读Pug文档以了解语法是如何工作的 (请注意,空间计数在pug中很重要)

当您想要发送HTML文件时,您可以使用以下代码发送pug文件

res.render('index.pug' , data) 
as数据是您的机票数据

然后在您的Pug文件中,在select标记处,您将希望创建一个自动插入HTML的循环

form#form-submit(method='post')
  #air-form-container.container
    .col-md-12
      label.dropbar-label(for='sel2') Airline: 
      select#sel2.form-control.airline-select(name='airline')
        option(value='none') Select airline
          each val,index in data
            option(value=index) #{val}
每个
函数将在数据中循环,然后为每个数据在其下方添加一行

优点:您的网站将加载所有可供使用的数据,无需等待

您可以使用的另一种方法是混合使用这两种方法—使用渲染引擎使数据就绪

当按下按钮时,它将使用js刷新数据

当然可以根据你的需要