📜  javascript中的投票(1)

📅  最后修改于: 2023-12-03 15:31:47.786000             🧑  作者: Mango

JavaScript中的投票

投票是社交网站、在线调查和选举等应用中常见的功能。JavaScript是一种在浏览器中执行的脚本语言,因此很适合实现投票功能。

投票的实现方式

投票可以通过不同的方式实现,以下是其中两种常见的方式:

1. 前后端分离式投票

前后端分离式投票是一种将数据交互从前端(如网页)和后端(如服务器)分离的方式。

前端将表单提交到后端,后端对数据进行处理并将结果返回给前端。通过Ajax技术,可使得数据处理和网页刷新的时候不需要进行页面跳转,提高交互效率。

该方式的优点是数据处理分明,易于维护。但由于需要完成后端处理,实现难度较大。

2. AJAX式投票

AJAX式投票是一种将数据交互集成到网页中的方式。

网页通过Ajax与服务器进行数据交互,在页面不进行整体刷新的情况下完成了数据的更新。

该方式的优点是实现难度相对较低,但请求数据量大时可能会对服务器造成负担。

投票的实现方法

投票的实现方法可以通过下列步骤完成:

  1. 编写HTML,并在其中包含投票所需的元素;
  2. 编写JavaScript代码,实现投票的逻辑和功能;
  3. 定义和服务器进行数据交互的接口,并实现后台数据库的处理;
  4. 在网页中使用Ajax技术,完成对服务器的数据请求和返回;
  5. 在网页上展示投票结果。
1. 编写HTML

HTML代码中应包含投票所需的元素。

以下是示例HTML代码:

<div class="vote">
  <div class="vote-title">这是一个投票</div>
  <div class="vote-options">
    <div class="vote-option" data-option-id="1">
      <label><input type="radio" name="option" value="1">选项1</label>
    </div>
    <div class="vote-option" data-option-id="2">
      <label><input type="radio" name="option" value="2">选项2</label>
    </div>
    <div class="vote-option" data-option-id="3">
      <label><input type="radio" name="option" value="3">选项3</label>
    </div>
  </div>
  <button class="vote-submit">提交</button>
</div>
<div class="vote-result">
  <div class="vote-result-title">投票结果</div>
  <div class="vote-option-result" data-option-id="1">
    <div class="vote-option-title">选项1</div>
    <div class="vote-option-count">0 票</div>
  </div>
  <div class="vote-option-result" data-option-id="2">
    <div class="vote-option-title">选项2</div>
    <div class="vote-option-count">0 票</div>
  </div>
  <div class="vote-option-result" data-option-id="3">
    <div class="vote-option-title">选项3</div>
    <div class="vote-option-count">0 票</div>
  </div>
</div>

其中包括了题目(vote-title)、选项(vote-option)、提交按钮(vote-submit)以及投票结果(vote-result)等。

2. 编写JavaScript

使用JavaScript来实现投票的逻辑和功能。以下是示例JavaScript代码:

// 获取投票选项
var options = document.querySelectorAll('.vote-option');
// 获取提交按钮
var submitBtn = document.querySelector('.vote-submit');

// 为提交按钮添加点击事件处理程序
submitBtn.addEventListener('click', function() {
  // 获取选中的选项
  var selectedOption = document.querySelector('input[name=option]:checked');
  if (selectedOption) {
    // 向后端发送投票请求
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/vote');
    xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
    xhr.onreadystatechange = function() {
      if (xhr.readyState === 4 && xhr.status === 200) {
        // 根据后端返回的结果更新投票结果
        var result = JSON.parse(xhr.responseText);
        updateVoteResult(result);
      }
    };
    xhr.send(JSON.stringify({option: selectedOption.value}));
  }
});

// 更新投票结果
function updateVoteResult(result) {
  // 遍历每个选项的结果,更新页面上的投票数
  for (var i = 0; i < result.length; i++) {
    var optionResult = result[i];
    var optionResultElem = document.querySelector('.vote-option-result[data-option-id="' + optionResult.id + '"]');
    if (optionResultElem) {
      optionResultElem.querySelector('.vote-option-count').textContent = optionResult.votes + ' 票';
    }
  }
}

// 初始化投票结果
function initVoteResult(result) {
  // 遍历每个选项的结果,更新页面上的投票数
  for (var i = 0; i < result.length; i++) {
    var optionResult = result[i];
    var optionResultElem = document.querySelector('.vote-option-result[data-option-id="' + optionResult.id + '"]');
    if (optionResultElem) {
      optionResultElem.querySelector('.vote-option-count').textContent = optionResult.votes + ' 票';
    }
  }
}

// 获取投票结果
var xhr = new XMLHttpRequest();
xhr.open('GET', '/vote/result');
xhr.onreadystatechange = function() {
  if (xhr.readyState === 4 && xhr.status === 200) {
    // 根据后端返回的结果更新投票结果
    var result = JSON.parse(xhr.responseText);
    initVoteResult(result);
  }
};
xhr.send();

该JavaScript代码中定义了以下功能:

  • 获取投票选项;
  • 获取提交按钮;
  • 为提交按钮添加点击事件处理程序;
  • 向后端发送投票请求;
  • 根据后端返回的结果更新投票结果;
  • 更新投票结果;
  • 初始化投票结果;
  • 获取投票结果。

需要注意的是,代码中使用了XMLHttpRequest对象来发送和接收数据。XMLHttpRequest是一个用于在后台与服务器交换数据的JavaScript对象,可用于通过JavaScript在网页上更新数据,而无需重新加载整个页面。

3. 定义和服务器进行数据交互的接口

数据交互可以通过HTTP协议进行。以下是与后端接口的示例代码:

// 定义投票选项对象
var options = [
  {id: 1, title: '选项1', votes: 0},
  {id: 2, title: '选项2', votes: 0},
  {id: 3, title: '选项3', votes: 0}
];

// 处理投票请求
app.post('/vote', function(req, res) {
  var option = req.body.option;
  for (var i = 0; i < options.length; i++) {
    if (options[i].id == option) {
      // 增加对应选项的投票数
      options[i].votes++;
      break;
    }
  }
  // 返回所有选项的结果
  res.json(options);
});

// 处理获取投票结果请求
app.get('/vote/result', function(req, res) {
  // 返回所有选项的结果
  res.json(options);
});

在这个例子中,我们使用了Node.js和Express框架来进行后端处理。在应用启动时,用一个数组来存储投票的选项,并在处理投票请求时,增加对应选项的投票数。随后,将所有选项的结果作为JSON格式返回给前端。

4. 使用Ajax技术完成对服务器的数据请求和返回

可以使用jQuery来完成Ajax交互。以下是使用Ajax技术的示例代码:

// 向后端发送投票请求
$.ajax({
  type: 'POST',
  url: '/vote',
  data: JSON.stringify({option: selectedOption.value}),
  contentType: 'application/json;charset=UTF-8',
  dataType: 'json',
  success: function(result) {
    // 根据后端返回的结果更新投票结果
    updateVoteResult(result);
  }
});

// 获取投票结果
$.ajax({
  type: 'GET',
  url: '/vote/result',
  dataType: 'json',
  success: function(result) {
    // 根据后端返回的结果更新投票结果
    initVoteResult(result);
  }
});

使用jQuery的好处是:代码比较简洁,API使用也友好。

5. 在网页上展示投票结果

通过HTML和JavaScript代码的更新,可以在网页上更新投票结果。

具体来说,在页面加载时,需要调用initVoteResult()函数来初始化投票结果;在投票完成后,需要调用updateVoteResult()函数来更新投票结果。

总结

本文介绍了JavaScript中投票的实现方式和方法,包括HTML、JavaScript、Ajax、服务器接口和数据交互等方面的内容。希望能够帮助读者了解JavaScript的运用,为开发更为丰富的产品打下基础。