You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django实现文章点赞功能时Ajax无报错无任何响应问题解决

Django文章点赞功能无响应解决方案

核心问题

你的AJAX请求使用了相对路径,浏览器会将相对路径拼接到当前页面URL后,而不是直接拼接到域名后:你当前访问的文章详情页路径是/article/[文章ID]/,填写的url: "like-article-commm"会被拼接为/article/[文章ID]/like-article-commm,和你在urls.py中配置的/like_article/路径完全不匹配,请求直接404,所以没有任何反应。

其他需修复的问题

  • 视图中查询集使用错误:existing_like = like_object_list.filter()返回的是查询集对象,不能直接读取属性,需要改为取单个对象
  • 视图逻辑缺失分支:未对已有点赞记录的情况做分支判断,修改已有记录后仍会重复新建点赞对象
  • JS布尔值写法错误:JS原生布尔值为小写true,大写True会被识别为未定义变量,可能导致传参异常

完整修改代码

前端AJAX部分

$('#like-button').click(function(){ 
    var article_id = '{{ article.id }}';
    var user_id = '{{ user.id }}';
    var like_dislike = true;

    $.ajax({ 
        type:"GET",
        // 方式1:使用Django模板标签动态生成路径,后续修改路由也不需要改JS
        url: "{% url 'like-article-commm' %}",
        // 方式2:直接写绝对路径,前面加/表示从根路径开始
        // url: "/like_article/",
        data:{ 
            article_id: article_id,
            user_id: user_id,
            like_dislike: like_dislike
        }, 
        success: function( data ) { 
            $('#like-button').css('color', 'blue'); 
        },
        // 新增错误回调,后续排错可以直接看控制台输出
        error: function(xhr) {
            console.log('请求错误:', xhr.responseText);
        }
    }) 
});

后端视图部分

def Like_Article_View(request):
    if request.method == 'GET':
        article_id = int(request.GET['article_id'])
        likedarticle = Article.objects.get(id = article_id)
        
        user_liked_id = int(request.GET['user_id'])
        userliked = User.objects.get(id = user_liked_id)

        like_dislike_0 = request.GET['like_dislike']
        like_object_list = Like_Article.objects.filter(article_liked = likedarticle, user_liked = userliked)

        if like_object_list.exists():
            existing_like = like_object_list.first()
            if existing_like.like_dislike == like_dislike_0:
                return HttpResponse('success')
            existing_like.like_dislike = like_dislike_0
            existing_like.save()
        else:
            # 只有没有历史点赞记录时才新建对象
            like_new_object= Like_Article(article_liked=likedarticle, user_liked=userliked, like_dislike=like_dislike_0)
            like_new_object.save()

        return HttpResponse('success')
    else:
        return HttpResponse("unsuccesful")

内容的提问来源于stack exchange,提问作者bookim online

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 12:51:02