本文目标主要介绍 通过 ajax+cookie 实现文章访问量和点赞数量的动态更新,并且在一次会话中,不会重复增加。即刷新网页,访问量不会增加,点赞数量也不能多次增加。
点赞:点赞后再继续点,点赞数不会增加,刷新也不行
浏览量:浏览量+1,刷新不会继续增加
1、点赞的 html 部分
2、文章浏览量 html 部分
3、js 代码
注意:一定要加 @ResponseBody 注解,否则返回值会被认为是 路径,导致 ajax 返回值类型不对,会出现一直是运行 error 里的部分。
最后我们可以查看浏览器 Cookie,发现里面有我们创建的 Cookie
本文链接:https://liuyanzhao.com/6175.html
效果预览
点赞:点赞后再继续点,点赞数不会增加,刷新也不行
浏览量:浏览量+1,刷新不会继续增加
视图层代码如下
1、点赞的 html 部分
- <span class="like">
- <a href="javascript:;" data-action="ding" data-id="1" title="点赞" class="favorite">
- <i class="fa fa-thumbs-up"></i>赞
- <i class="likeCount">${articleCustom.articleLikeCount}</i>
- </a>
- </span>
2、文章浏览量 html 部分
- <li class="views">
- <i class="fa fa-eye"></i><i class="viewCount"> ${articleCustom.articleViewCount}</i> views
- </li>
3、js 代码
- <script src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
- <script src="${pageContext.request.contextPath}/js/jquery.cookie.js"></script>
- <script type="text/javascript">
- function increaseViewCount() {
- if($.cookie("viewId")!=${articleCustom.articleId}) {
- $.ajax({
- async: false,
- type:"POST",
- url:"${pageContext.request.contextPath}/article/view",
- data: {articleId:${articleCustom.articleId}},
- dataType:"text",
- success:function (data) {
- $(".viewCount").html(data);
- $.cookie(
- "viewId",
- ${articleCustom.articleId},//需要cookie写入的业务
- {
- "path":"/", //cookie的默认属性
- }
- );
- },
- error:function()
- {
- //alert("获取数据出错!");
- },
- });
- }
- }
- increaseViewCount();
- $(".favorite").click(function () {
- if($.cookie("likeId")!=${articleCustom.articleId}) {
- $.ajax({
- async: false,
- type:"POST",
- url:"${pageContext.request.contextPath}/article/like",
- data: {articleId:${articleCustom.articleId}},
- dataType:"text",
- success:function (data) {
- $(".likeCount").html(data);
- $.cookie(
- "likeId",
- ${articleCustom.articleId},//需要cookie写入的业务
- {
- "path":"/", //cookie的默认属性
- }
- );
- },
- error:function()
- {
- //alert("获取数据出错!");
- },
- });
- }
- });
控制器代码
- //点赞数增加
- @RequestMapping(value = "/article/like",method = {RequestMethod.POST})
- @ResponseBody
- public Integer increaseLikeCount(HttpServletRequest request)
- throws Exception {
- Integer articleId = Integer.valueOf(request.getParameter("articleId"));
- ArticleCustom articleCustom = articleService.getArticleById(articleId);
- int articleCount = articleCustom.getArticleLikeCount();
- articleCustom.setArticleLikeCount(articleCount + 1);
- articleService.updateArticle(articleId, articleCustom);
- return articleCount+1;
- }
- //文章访问量数增加
- @RequestMapping(value = "/article/view",method = {RequestMethod.POST})
- @ResponseBody
- public Integer increaseViewCount(HttpServletRequest request)
- throws Exception {
- Integer articleId = Integer.valueOf(request.getParameter("articleId"));
- ArticleCustom articleCustom = articleService.getArticleById(articleId);
- int articleCount = articleCustom.getArticleViewCount();
- articleCustom.setArticleViewCount(articleCount + 1);
- articleService.updateArticle(articleId, articleCustom);
- return articleCount+1;
- }
注意:一定要加 @ResponseBody 注解,否则返回值会被认为是 路径,导致 ajax 返回值类型不对,会出现一直是运行 error 里的部分。
最后我们可以查看浏览器 Cookie,发现里面有我们创建的 Cookie
本文链接:https://liuyanzhao.com/6175.html
2021年05月20日 11:04:18
好用!!,大家只要下一个cookies的js然后引入起来即可,地址如下https://plugins.jquery.com/cookie/ 其中${articleCustom.articleId} 替换成自己的id 即可。
2019年09月11日 00:27:59
这些代码在哪个文件下添加?博主的文章右上角浏览统计是怎么实现的?
2019年09月06日 14:56:44
有全代码吗?请问
2019年01月09日 13:48:11
Integer articleId = Integer.valueOf(request.getParameter("articleId"));这个不是获得文章id的吗? 后台是怎么使用cookie的,判断是否存在,存在就不修改访问量,直接返回吗? 代码没体现吗?
2019年01月09日 18:35:58
后台没有用cookie,都是前台做的
2017年09月04日 21:22:54
感谢楼主的分享