美文网首页
一个“收藏”操作添加了两条记录

一个“收藏”操作添加了两条记录

作者: 猴八哥 | 来源:发表于2016-08-20 23:28 被阅读0次

描述

这周在做一个简单的电商项目,遇到了一个问题:用户在点击了商品收藏按钮后,数据库里添加了2条记录,它们除了主键Id外其他字段都相同。

实现情况

添加收藏这个功能的实现方式是这个样子的:后端有一个控制器来处理来自网页的异步POST请求,然后返回JSON来告知是否成功。数据库是一个简单的用户与商品的关系表。控制器中已经做了是否重复添加的判断。

分析与解决

首先,第一反应是检查控制器的判断条件是否写错了,结果是并没有。

之后,思考了一阵,查看了收藏操作的网络请求,结果发现这个点击事件发送了两次POST请求。这样就暂时算搞清楚了问题的原因,即并发问题。考虑到这个系统应该对并发的要求并不高,后端暂时不需要调整。那么,接下来这个问题就简化为了另一个问题——为什么一次点击事件触发了两次POST请求。

检查了js代码,这个事件绑定的方法没有写错。preventdefault,发起异步post请求,处理异步请求返回结果。

我对前端不太熟,请教了公司里的老司机。他说一般两个原因:

  1. 事件重复绑定。检查了一圈,并没有。

  2. 其实和1是相同的,只是表现不太一样,即绑定事件所在js外部文件被重复引入。由于项目不大,js文件都是在render页面中手工引入的。果然,该文件在layout模板和当前页面中各被引用一次,因此才出现了这个问题。

总结

  1. 排查bug和写代码也是一样的,大事化小,小事化无。无限可能的情况,按顺序排查,进而将问题转化为更小的问题。这和代码的抽象是同样的东西。

  2. 注意js文件的引入以及事件的绑定情况。

相关文章

  • 一个“收藏”操作添加了两条记录

    描述 这周在做一个简单的电商项目,遇到了一个问题:用户在点击了商品收藏按钮后,数据库里添加了2条记录,它们除了主键...

  • 2019-11-15 Django 中间件产生日志并存储到 Mo

    Django 默认后台有一个 LogEntry 来记录后台操作记录,但是系统添加了前端之后使用了 Django R...

  • get和post的区别

    getpost缓存资源可以被缓存一般不缓存历史记录记录不记录书签可收藏不可收藏请求限制2KB无限制作用资源获取操作...

  • 实用git 操作(随时更新)

    本文随时更新,记录常用的 git 操作,记得收藏 1.回滚某个文件 Overwrite the contents ...

  • 软件架构师笔记(操作系统的类型和结构)

    操作系统原理关键在于:理解“一个观点、两条线索”一个观点:管理资源的观点来定义操作系统两条线索:操作系统如何管理计...

  • 情绪感知记录(1)

    进入5月后,在原有记录框架之上又添加了一个“情绪感知记录”,用于记录每天自己在投资市场上的操作和反思。 1、短线反...

  • 个人经验总结.md

    记录 推广 在知乎看到一个骚操作, 先描述各种薅羊毛免费的产品,然后提供了一个qq群的连接 知乎 -> 收藏 ->...

  • 智能、全平台书签管理工具:Pinbox

    收藏是我们平时网上冲浪常见的操作,比如看到掘金里质量高的文章,我们会通过"点赞"或者"收藏"来记录,或者使用浏览器...

  • 添添课堂观察记录

    这周大组孩子数学逻辑思维玩的是九宫格游戏,孩子们兴致很高。添添今天第一次玩,老师先讲解了玩法,因还不会写数字,建议...

  • 【一米阳光】亲子共读30天

    20161205 day6 【亲子讨论】今天带添添去参加了一个朋友的婚礼,婚礼过后,添添满脑子的新娘和新郎。“新娘...

网友评论

      本文标题:一个“收藏”操作添加了两条记录

      本文链接:https://www.haomeiwen.com/subject/zpiisttx.html