Ajax点赞需实现请求发送、响应处理、DOM更新闭环,携带CSRF token,返回新数量并更新界面,禁用按钮防重复,服务端原子更新确保一致性。

用 Ajax 实现点赞数量的异步局部刷新,核心是:不刷新整个页面,只更新数字本身,并同步服务端状态。关键在于请求发送、响应处理、DOM 更新三步闭环,且要防重复点击和处理失败情况。
发送带 CSRF 保护的 POST 请求
现代 Web 应用通常要求带 CSRF token(如 Django、Spring Security),不能只发裸数据。需从页面中提取 token,附在请求头或表单数据里。
- 从 meta 标签或隐藏 input 读取 token,例如:
- 使用
fetch发送 JSON 请求时,在headers中添加'X-CSRF-Token': token - 后端接口建议用 POST(语义更准确),路径如
/api/article/123/like或/like(配合 body 传 id)
响应返回新点赞数并更新 DOM
后端应返回结构清晰的 JSON,比如 { "success": true, "count": 42, "liked": true }。前端据此更新数字和按钮状态。
- 找到对应文章的点赞数容器,如
document.querySelector('.like-count[data-id="123"]') - 用返回的
count更新 innerText:el.textContent = data.count - 同时切换按钮样式(如加 class
active)和文案(“已赞” / “点赞”)
防止重复提交与错误反馈
用户快速连点会导致多次请求,可能造成计数错乱或体验卡顿。必须做前端节流和状态锁。
- 点击后立即禁用按钮:
button.disabled = true,成功/失败后再恢复 - 用布尔变量或 dataset 标记是否正在请求,避免并发触发
- 网络失败时提示用户(如 toast 提示“点赞失败,请重试”),并还原按钮状态
- 可选:成功后加轻微动画(如数字 +1 闪动),增强反馈感
服务端需原子更新并返回最新值
数据库操作必须保证“读-改-写”原子性,避免竞态。推荐用 SQL 的 UPDATE ... RETURNING(PostgreSQL)或 MongoDB 的 findOneAndUpdate。
- 不要先查再更新(易冲突),直接执行
likes = likes + 1并返回新值 - 同时记录用户是否已点过(如用 Redis Set 或数据库关联表),用于判断
liked字段 - HTTP 状态码建议:200 成功,401 未登录,409 冲突(重复点),500 服务异常
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











