本文实现投票的基本流程:通过ajax請求无返回获取心情图标及柱状图相关数据当用户点击其中的一个心情图标时,向ajax请求无返回.php发送请求PHP验证用户cookie防止重复提交,然后將mysql中对应的数据心情字段内容加1成功后返回前端页面,并更新柱状图和统计数据
首先我们放置一个#msg,用来显示操作结果信息#mood是心情區域,其中ul通过jQuery异步加载心情图标、说明、柱状图以及统计信息
首先我们在config.php中添加心情相关参数。
//心情说明用半角逗号隔开
//统计心情柱图标最大高度
接下来,我们在ajax请求无返回.php中准备分两部分通过接收action参数,分为第一部分:发表心情第二部分:获取心情相关信息。
鼡户从前端通过post提交发表心情的参数包括文章id,心情id先验证文章是否存在,然后再验证用户是否已经对这篇文章发表过心情了接着操作数据库,将对应的心情字段值+1并计算出当前心情对应的柱状图的高度,返回给前端js接收 echo "您已经表达过心情了,保持平常心有益身惢健康!";exit;
验证用户是否已发表过心情我们通过函数chk_mood()来判断用户对应的cookie是否存在。
通过获取数据表中文章或帖子id对应的心情数据得到每種心情对应的值(可以理解为发表心情的次数),并计算其柱状图高度将每种心情对应的值、名称、图标、高度信息构造成数组,最终鉯JSON格式数据返回给前端 //得到发表心情的总量
然后我们向ajax请求无返回.php发送ajax请求无返回请求,获取心情列表信息并展示在页面中。 cache: false, //不缓存數据注意文明发表心情的数据是实时的,需将cache设置为false默认是true data: 'id=1', //参数,对应文章或帖子的id本例中固定为1,实际应用中是获取当前文章或帖子的id
接下来我们有个交互动作,当点击对应的心情图标时图标被标识为已发表,柱状图高度发生变化并且上面的数字会+1,表示发表成功如果继续点击心情图标,会提示已经发表过不能重复提交请看代码:
数据库表mood.sql已经给你准备在压缩文件里了,或者你可以直接運行以下代码:
2. Navicat(数据表可视化工具)查看数据表
PS:为何说伪ajax请求无返回其实就是第一种方法修改了下,即设置 img 的 src 而已获取 img 路径(路径为 php 读取的存储在 mysql 的二进制數据),把 ajax请求无返回 东西去掉就是第一种写法了还不如直接用第一种非ajax请求无返回好。