基于js实现投票的实例代码

首先,基于js实现投票要考虑两个方面,其一是前端页面的实现,其二是后端接口的实现。

前端页面实现

前端页面主要包含页面布局和交互逻辑两个部分。

页面布局

可以使用HTML/CSS完成页面布局,页面布局可以按照个人需求自定义设计,以本次介绍的前端实现为例,可分为以下几个区域:

  • 问题区:用于展示当前投票的问题
  • 选项区:用于展示当前问题的选项内容
  • 操作区:用于用户进行投票操作,包含投票按钮和查看投票结果按钮

以下是示例代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>投票系统</title>
</head>
<body>
    <div id="question"></div>
    <ul id="options"></ul>
    <div id="btnArea">
        <button onclick="vote()">投票</button>
        <button onclick="showResult()">查看结果</button>
    </div>
</body>
</html>

以上代码中,<div><ul><button> 等HTML标签分别表示相应的区域和操作按钮。

交互逻辑

为了实现投票,我们需要绑定交互事件,并通过ajax发起数据交互请求。

以下是示例代码:

var options = document.getElementById("options");
var question = document.getElementById("question");

// 加载投票问题和选项列表
function loadQuestion() {
    // 发送AJAX请求获取投票问题和选项列表
    ...
    // 根据返回数据设置问题和选项
    question.innerHTML = data.question;
    for (var i = 0; i < data.options.length; i++) {
        var item = data.options[i];
        var li = document.createElement("li");
        li.setAttribute("data-id", item.id);
        li.innerHTML = item.content;
        options.appendChild(li);
    }
}

// 发起投票请求
function vote() {
    var selectedOption = document.querySelector("#options li.selected");
    if (!selectedOption) {
        alert("请选择一个选项");
        return;
    }
    var optionId = selectedOption.getAttribute("data-id");
    // 发送AJAX请求提交投票结果
    ...
}

// 查看投票结果
function showResult() {
    // 发送AJAX请求获取投票结果
    ...
    // 显示投票结果
    ...
}

// 注册选项点击事件
options.addEventListener("click", function(e) {
    if (e.target.tagName === "LI") {
        var selected = document.querySelector("#options li.selected");
        if (selected) {
            selected.classList.remove("selected");
        }
        e.target.classList.add("selected");
    }
});

以上代码中,loadQuestion 函数会发起Ajax请求获取投票问题和选项列表,并根据返回数据更新页面内容。vote 函数会发起Ajax请求提交投票结果。showResult 函数发起Ajax请求获取投票结果并将结果显示到页面上。options 区域绑定 click 事件,根据点击项切换选定状态。

后端接口实现

后端接口需要提供投票的相关逻辑,同时要注意安全性。

以下是示例代码:

const express = require("express");
const bodyParser = require("body-parser");
const app = express();

// 问题列表
const questions = [{
    id: "1",
    question: "你最爱的水果是什么?",
    options: [{
        id: "1",
        content: "苹果"
    }, {
        id: "2",
        content: "香蕉"
    }, {
        id: "3",
        content: "橙子"
    }]
}, {
    id: "2",
    question: "你最爱的动物是什么?",
    options: [{
        id: "1",
        content: "猫"
    }, {
        id: "2",
        content: "狗"
    }, {
        id: "3",
        content: "熊猫"
    }]
}];

// 投票结果
let results = {};

// 设置允许跨域访问
app.all("*", function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    next();
});

// 解析POST请求
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// 获取问题列表
app.get("/questions", function(req, res) {
    res.json(questions);
});

// 提交投票结果
app.post("/vote", function(req, res) {
    var optionId = req.body.optionId;
    if (!optionId) {
        res.status(400).json({ error: "参数错误" });
        return;
    }
    // 记录投票结果
    if (!results[optionId]) {
        results[optionId] = 1;
    } else {
        results[optionId]++;
    }
    res.json({ success: true });
});

// 获取投票结果
app.get("/result", function(req, res) {
    res.json(results);
});

app.listen(3000);

以上代码中,我们使用Express框架搭建了一个简单的后端应用。其中 questions 表示投票问题和选项, results 表示投票结果。 app.get("/questions", ...) 表示提供获取投票问题和选项列表的API, app.post("/vote", ...) 表示提交投票结果的API, app.get("/result", ...) 表示获取投票结果的API。在提交投票结果时,需要根据请求中的选项ID更新投票结果。

至此,我们基于js实现投票的实例代码就介绍完了。可以将前端页面部署在任意静态服务器上,将后端接口部署在服务器端环境,利用Ajax技术进行数据交互,实现一个简单的投票系统。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于js实现投票的实例代码 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Spring MVC请求参数接收的全面总结教程

    接下来我将详细讲解Spring MVC请求参数接收的全面总结教程。 为什么需要请求参数接收 在Web开发中,经常需要接收前端传来的数据,这些数据以请求参数的形式传递。请求参数通常包含了用户请求的具体行为,并提供了必要的参数数据。例如,访问百度搜索,连接中会携带请求参数q,表示搜索关键词。 Spring MVC框架提供了有用且全面的请求参数接收处理机制,让我们…

    Java 2023年5月16日
    00
  • 利用solr实现商品的搜索功能(实例讲解)

    以下是利用Solr实现商品的搜索功能的完整攻略: 准备工作 安装Java环境和Solr 导入商品数据到Solr中 创建schema和field定义 在Solr中创建schema.xml文件,并定义field: <field name="id" type="string" indexed="true&qu…

    Java 2023年5月26日
    00
  • Java中Stream流去除List重复元素的方法

    首先要说明一下,Java中的Stream流是Java8中新增的一种函数式操作流程,主要用来对集合进行函数式操作,它可以对集合进行一些链式操作,比如筛选、分组、排序、去重等。 List去重,在Java8中,可以借助Stream流,具体步骤如下: 使用Stream.builder()来构造一个Stream.Builder对象; 通过builder对象调用add方…

    Java 2023年5月31日
    00
  • 微信小程序向Java后台传输参数的方法实现

    如何实现微信小程序与Java后台之间的参数传递是一个较为重要且常见的问题。下面是一份完整的攻略,它包含了从前端到后端的全部知识点和示例。 前端实现 在微信小程序中传递参数的方法,与普通Web开发的方法类似。我们这里着重讲述以下两种方法: 参数以GET方式拼接在URL后传递 这是一种最常用的传参方法,它比较直观,易于理解和操作。GET方式传参的地址是一个完整的…

    Java 2023年5月23日
    00
  • Spring Security UserDetails实现原理详解

    Spring Security UserDetails实现原理详解 Spring Security 是一个功能强大的安全框架,它的核心是 Spring Security 核心包。其中,UserDetails 是 Spring Security 中的一个核心接口,它包含了用户信息以及授权信息等内容。本文将详细讲解 Spring Security UserDet…

    Java 2023年5月20日
    00
  • Spring项目运行依赖spring-contex解析

    Spring框架是个非常流行的Java开发框架,它通过使用依赖注入和面向切面编程等技术来简化Java开发过程。在Spring框架中,spring-context模块是一个非常重要的模块,它提供了一些关键的功能,如依赖注入、AOP和Java EE集成等。在本文中,我们将提供一份完整攻略,从基础到深入,让你了解Spring项目在运行中依赖spring-conte…

    Java 2023年5月20日
    00
  • java 数学计算的具体使用

    Java 数学计算的具体使用 在Java中,我们可以使用内置的Math类来进行数学运算。该类提供了许多静态方法,可以进行各种数学运算。本文将详细介绍Math类中提供的方法,并通过两个示例说明如何在Java中使用这些方法。 常用Math类方法 常量 Math类提供了两个数学常数: π(圆周率):Math.PI e(自然对数的底数):Math.E 基本运算 绝对…

    Java 2023年5月26日
    00
  • Linux系统中Tomcat环境配置方式

    下面是详细讲解 Linux 系统中 Tomcat 环境配置方式的完整攻略: 1. 下载Tomcat 首先,需要从官方网站下载 Tomcat,下载地址:https://tomcat.apache.org/download-90.cgi 在这里我们选择下载 Tomcat 9.0 版本,下载完成后解压。 2. 配置环境变量 将 Tomcat 解压到目标位置,比如 …

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部