如何从 .ejs 获取值到 javascript 文件
How to get value from .ejs to javascript file
我有一个 .ejs 文件,它实际上是一个下拉表单,使用 sqlite3 数据库填充数据。现在我想做的是,当我 select 下拉列表中的一个值时,我想将它发送回我的 javascript 文件,在那里我将它保存到数据库中。
通常这对我自己制作的 select 语句并不难,但是由于此 select 语句是从 javascript 填充的,发回的值是未定义,不知道为什么。
总结示例:
我有一个已登录的用户,可以选择在下拉菜单中保存锻炼。
锻炼table
编号:5
姓名:二头肌
结果
运动
ID:1
姓名:二头肌
锻炼 ID:5
我的代码
Javascript 到 .ejs
var Workout = bookshelf.Model.extend({
tableName: 'workout'
});
var Exercise = bookshelf.Model.extend({
tableName: 'exercise',
workout: function()
{
return this.hasMany(Workout)
}
});
router.get('/', function (req, res) {
new Vaje().fetchAll().then(function (workout) {
res.render('Exercise', { workout: workout });
}).catch(function (error) {
console.log(error);
});
});
这会将来自 workout table 的所有数据发送到 .ejs
上的 select 表格
.ejs 文件
<h2>Select workout</h2>
<select>
<% workout.forEach(function(w) { %>
<option id=""
<%=w.attributes.id%>">
<%= w.attributes.name %>
</option>
<% }); %>
</select>
<br></br>
<form method="post">
<input type="submit" value="Add workout" />
</form>
javascript 文件
此文件现在应获得 selected 值并将其保存到数据库...
router.post('/', function (req, res) {
var new_workout = req.body;
console.log("Workout: " + JSON.stringify(new_workout));
new Exercise().save(new_workout);
});
来自控制台的结果
我不知道为什么这个值是 undefined/empty,但我非常想知道。
任何帮助将不胜感激!
更新
更新2
解决方案
router.post('/', function (req, res) {
new Vaje({ 'id': parseInt(req.body.naziv) })
.fetch()
.then(function (new_workout) {
if (new_workout != null)
new Trening().save({
vaje_id: new_workout.get("id"),
naziv: new_workout.get("naziv")
});
});
});
问题出在您的 ejs 文件上。您的表格中有 Select 个。
<h2>Select workout</h2>
<form method="post">
<select name="workout">
<% workout.forEach(function(w) { %>
<option value="<%=w.attributes.id%>">
<%= w.attributes.name %>
</option>
<% }); %>
</select>
<br></br>
<input type="submit" value="Add workout" />
</form>
编辑 1
你有没有添加到你的应用程序中(对于 express 3)。
app.use(express.bodyParser());
需要处理 post 正文。
编辑 2 - Express v.4 的解决方案
首先你需要安装额外的包
npm install body-parser --save
稍后编辑您的应用程序:
var express = require('express'); // <- this is your code
var bodyParser = require('body-parser');
var app = express(); // <- this is your code
app.use(bodyParser.urlencoded({ extended: false }));
// and now app listen
app.listen(8888); // <- your port here
编辑 3
如何获取姓名和身份证。会是这样的。
router.post('/', function (req, res) {
new Workout({'id': parseInt(req.body.workout)})
.fetch()
.then(function(new_workout) {
if(new_workout != null)
new Exercise().save({
vaje_id: new_workout.get("id"),
name: new_workout.get("name")
});
});
});
我有一个 .ejs 文件,它实际上是一个下拉表单,使用 sqlite3 数据库填充数据。现在我想做的是,当我 select 下拉列表中的一个值时,我想将它发送回我的 javascript 文件,在那里我将它保存到数据库中。
通常这对我自己制作的 select 语句并不难,但是由于此 select 语句是从 javascript 填充的,发回的值是未定义,不知道为什么。
总结示例:
我有一个已登录的用户,可以选择在下拉菜单中保存锻炼。
锻炼table
编号:5
姓名:二头肌
结果
运动
ID:1
姓名:二头肌
锻炼 ID:5
我的代码
Javascript 到 .ejs
var Workout = bookshelf.Model.extend({
tableName: 'workout'
});
var Exercise = bookshelf.Model.extend({
tableName: 'exercise',
workout: function()
{
return this.hasMany(Workout)
}
});
router.get('/', function (req, res) {
new Vaje().fetchAll().then(function (workout) {
res.render('Exercise', { workout: workout });
}).catch(function (error) {
console.log(error);
});
});
这会将来自 workout table 的所有数据发送到 .ejs
上的 select 表格.ejs 文件
<h2>Select workout</h2>
<select>
<% workout.forEach(function(w) { %>
<option id=""
<%=w.attributes.id%>">
<%= w.attributes.name %>
</option>
<% }); %>
</select>
<br></br>
<form method="post">
<input type="submit" value="Add workout" />
</form>
javascript 文件
此文件现在应获得 selected 值并将其保存到数据库...
router.post('/', function (req, res) {
var new_workout = req.body;
console.log("Workout: " + JSON.stringify(new_workout));
new Exercise().save(new_workout);
});
来自控制台的结果
我不知道为什么这个值是 undefined/empty,但我非常想知道。
任何帮助将不胜感激!
更新
更新2
解决方案
router.post('/', function (req, res) {
new Vaje({ 'id': parseInt(req.body.naziv) })
.fetch()
.then(function (new_workout) {
if (new_workout != null)
new Trening().save({
vaje_id: new_workout.get("id"),
naziv: new_workout.get("naziv")
});
});
});
问题出在您的 ejs 文件上。您的表格中有 Select 个。
<h2>Select workout</h2>
<form method="post">
<select name="workout">
<% workout.forEach(function(w) { %>
<option value="<%=w.attributes.id%>">
<%= w.attributes.name %>
</option>
<% }); %>
</select>
<br></br>
<input type="submit" value="Add workout" />
</form>
编辑 1 你有没有添加到你的应用程序中(对于 express 3)。
app.use(express.bodyParser());
需要处理 post 正文。
编辑 2 - Express v.4 的解决方案
首先你需要安装额外的包
npm install body-parser --save
稍后编辑您的应用程序:
var express = require('express'); // <- this is your code
var bodyParser = require('body-parser');
var app = express(); // <- this is your code
app.use(bodyParser.urlencoded({ extended: false }));
// and now app listen
app.listen(8888); // <- your port here
编辑 3
如何获取姓名和身份证。会是这样的。
router.post('/', function (req, res) {
new Workout({'id': parseInt(req.body.workout)})
.fetch()
.then(function(new_workout) {
if(new_workout != null)
new Exercise().save({
vaje_id: new_workout.get("id"),
name: new_workout.get("name")
});
});
});