使用JavaScript开发网页投票系统

1. 简介

投票应用程序是Web应用程序中最常见的应用程序之一。这里将使用JavaScript和一些其他Web技术来创建一个简单的投票应用程序。这个应用程序将允许用户投票并显示结果。

2. 开发工具

为了构建这个投票应用程序,需要使用一些Web技术,并使用以下工具:

2.1 Web服务器

要在本地运行这个应用程序,需要安装Web服务器。这里使用Node.js来作为Web服务器。可以从https://nodejs.org/en/download/下载和安装Node.js。

2.2 前端框架

这里使用Bootstrap作为前端UI框架。Bootstrap提供了一个现成的组件库,可以使开发过程更快捷。

2.3 数据库

为了存储投票结果,需要使用一个数据库。这里使用MongoDB作为数据库。可以从https://www.mongodb.com/download-center下载并安装MongoDB。

3. 投票应用程序架构

这个投票应用程序将分为前端和后端两个部分。前端将使用HTML、CSS和JavaScript编写,并使用Bootstrap来构建UI。后端将使用Node.js和MongoDB。

3.1 前端

前端将采用单页应用程序(SPA)的架构。当用户在UI中进行投票时,SPA将使用AJAX调用后端API来保存投票结果,并使用JavaScript更新UI以显示新的投票结果。

3.2 后端

后端将使用Node.js和MongoDB来存储投票结果。

API将提供以下功能:

获取投票选项列表

获取投票结果

保存投票结果

4. 前端实现

这个应用程序的前端将在页面上显示两个候选项以供用户进行投票,同时,将显示投票结果。候选项的缩写和名称将保存在一个数组中:

let candidates = [

{abbr: 'A', name: 'Candidate A', count: 0},

{abbr: 'B', name: 'Candidate B', count: 0}

];

这里使用了jQuery和Bootstrap来简化UI的编写。在这里假设已经下载了这两个库,然后将它们包含在HTML文件中:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Vote Application</title>

<!-- https://getbootstrap.com/docs/4.5/getting-started/introduction/ -->

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet">

</head>

<body>

<div class="container my-4">

<h1>Vote Application</h1>

<div id="candidates"></div>

<div id="result"></div>

</div>

<!-- https://code.jquery.com/ -->

<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>

<!-- https://getbootstrap.com/docs/4.5/getting-started/introduction/ -->

<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>

<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>

</body>

</html>

4.1 显示候选项

在页面上显示候选项,首先需要创建一个函数来生成HTML代码:

function generateCandidatesHtml() {

const candidatesHtml = candidates.map(candidate => {

return `

<div class="form-check">

<input class="form-check-input candidate-checkbox" type="checkbox" id="${candidate.abbr}">

<label class="form-check-label" for="${candidate.abbr}">${candidate.name}</label>

</div>

`;

}).join('');

return `

<h2>Candidates</h2>

<div class="form-group">

${candidatesHtml}

</div>

<button class="btn btn-primary vote-button">Vote</button>

`;

}

接下来,在页面上调用generateCandidatesHtml() 函数来显示候选项:

$('#candidates').html(generateCandidatesHtml());

4.2 显示投票结果

显示投票结果,也需要创建一个函数来生成HTML代码:

function generateResultHtml() {

let totalVotes = candidates.reduce((acc, candidate) => {

return acc + candidate.count;

}, 0);

const resultHtml = candidates.map(candidate => {

return `

<li>

${candidate.abbr}: ${candidate.name} - ${candidate.count}

(${totalVotes === 0 ? '0' : ((candidate.count / totalVotes) * 100).toFixed(2)}%)

</li>

`;

}).join('');

return `

<h2>Result</h2>

<ul>

${resultHtml}

</ul>

<p>Total votes: ${totalVotes}</p>

`;

}

然后在页面上调用generateResultHtml()函数来显示投票结果:

$('#result').html(generateResultHtml());

4.3 投票处理

处理投票需要在“投票”按钮上注册一个点击事件处理程序,该事件处理程序将使用AJAX调用后端API来保存投票结果,并使用JavaScript更新UI以显示新的投票结果。

$('.vote-button').click(function() {

const selectedCandidates = $('.candidate-checkbox:checked').map(function() {

return this.id;

}).get();

if (selectedCandidates.length === 0) {

alert('Please select at least one candidate');

return;

}

const requestData = {candidates: selectedCandidates};

$.ajax({

type: 'POST',

url: '/api/vote',

contentType: 'application/json',

data: JSON.stringify(requestData),

success: function() {

$.ajax({

type: 'GET',

url: '/api/result',

success: function(result) {

candidates = result;

$('#candidates').html(generateCandidatesHtml());

$('#result').html(generateResultHtml());

}

});

},

error: function() {

alert('Failed to save vote.');

}

});

});

5. 后端实现

后端将使用Node.js和MongoDB来存储投票结果。

5.1 安装依赖项

npm init -y

npm install express mongodb body-parser

5.2 创建Express应用程序

接下来,创建一个Express应用程序:

const express = require('express');

const bodyParser = require('body-parser');

const mongodb = require('mongodb');

const app = express();

const port = process.env.PORT || 3000;

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({ extended: true }));

app.listen(port, () => {

console.log(`Server started at http://localhost:${port}`);

});

5.3 连接MongoDB

接下来连接MongoDB数据库:

const mongodbUrl = 'mongodb://localhost:27017/voteapp';

const MongoClient = mongodb.MongoClient;

let db;

MongoClient.connect(mongodbUrl, (err, client) => {

if (err) throw err;

db = client.db();

});

5.4 创建API

创建API来处理投票请求和获取投票结果的请求:

app.post('/api/vote', (req, res) => {

const candidates = req.body.candidates;

const updates = candidates.map(candidate => {

return {

updateOne: {

filter: {abbr: candidate},

update: {$inc: {count: 1}}

}

};

});

db.collection('candidates').bulkWrite(updates)

.then(result => {

res.sendStatus(200);

})

.catch(err => {

console.log(err);

res.sendStatus(500);

});

});

app.get('/api/result', (req, res) => {

db.collection('candidates').find().toArray()

.then(result => {

res.json(result);

})

.catch(err => {

console.log(err);

res.sendStatus(500);

});

});

6. 结论

本文演示了使用JavaScript和其他Web技术创建一个简单的投票应用程序。前端使用了Bootstrap,后端使用了Node.js和MongoDB,通过AJAX实现了前端与后端之间的交互。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。