Django点赞删除功能前端无法正确接收JSON响应问题排查
问题原因及修复方案
核心问题出在删除点赞的视图返回了HTTP 204状态码,这直接导致前端无法正常解析JSON:
为什么204会引发问题
HTTP 204(No Content)的标准规则是:服务器处理请求成功,但不返回任何响应内容。前端调用fetch后执行response.json()时,因为没有可解析的响应体,必然抛出解析错误——这就是你看到的前端无法接收正确反馈的原因。
而创建点赞的视图返回的是HTTP 201(Created),这个状态码允许携带响应体,所以前端能正常解析JSON数据。
快速修复
把LikesDeleteView中的返回状态码从204改成200(或者和创建接口一致用201也可以,200更通用):
# 修改LikesDeleteView的返回语句 return HttpResponse(return_value, status=200)
额外优化建议
- 明确指定响应类型:在返回
HttpResponse时加上content_type='application/json',避免MIME类型解析异常:return HttpResponse(return_value, status=200, content_type='application/json') - 使用Django自带的JsonResponse:替代手动
json.dumps+HttpResponse,更简洁还能自动处理JSON格式和MIME类型:# 创建视图修改示例 return JsonResponse({'likes_cnt': article.likes_cnt, 'liked_by_me': article.liked_by_me}, status=201) # 删除视图修改示例 return JsonResponse({'likes_cnt': article.likes_cnt, 'liked_by_me': article.liked_by_me}, status=200)
修改后,删除点赞的接口会返回带JSON响应体的200状态码,前端就能正常解析数据并更新页面的点赞状态和计数了。
内容的提问来源于stack exchange,提问作者yoshitaka okada
相关产品推荐
相关产品推荐

