Django:ajax 在 Django 中不返回或发送任何数据

Django: ajax not returning or sending any data in django

我正在使用 ajax 创建一个简单的点赞按钮,我已经按照教程进行操作,但似乎我遗漏了一些东西,我在 Django 终端的控制台中没有收到任何错误,但是当我点击按钮没有数据被发送,一切都保持原样,这不是我所期待的,我知道我在某处遗漏了一些东西,我无法真正分辨出这个错误是从哪里来的。

views.py

@login_required
def like(request):
    if request.POST.get("action") == 'post':
        result = ""
        id = int(request.POST.get('courseid'))
        course = get_object_or_404(Course, id=id)

        if course.like.filter(id=request.user.id).exists():
            course.like.remove(request.user)
            course.like_count -= 1
            result = course.like_count
            course.save()
        else:
            course.like.add(request.user)
            course.like_count += 1
            result = course.like_count
            course.save()
        return JsonResponse({'result': result})

urls.py 注意:我不知道我是否需要在这个 url 路径中添加 slug

    path('like/', views.like, name="like"),

base.html

   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

课程-detail.html

<li><button id="like-button" value="{{course.id}}">like</button><span id="like-count">{{course.llke_count}}</span></li>



<script type="text/javascript">
        
    $(document).on("click", '#like-button', function(e){
        e.preventDefault()
        $.ajax({
            type: 'POST',
            url: '{% url 'course:like' course.slug %}',
            data: {
                courseid: $('#like-button').val(),
                csrfmiddlewaretoken: $("input[name=csrfmiddlewaretoken]").val(),
                action: 'post'
            },
            success: function(json){
                document.getElementById("like-count").innerHTML = json['result']
                console.log(json)
            },
            error: function (xhr, errmsg, err)
            console.log(xhr)
            console.log(errmsg)
            console.log(err)
        })
    })

</script>

这是我为功能编写的所有代码,如果有任何其他要提供的东西我会更新问题

第一次回答后更新 ############################################# ########################

现在,当我点击“赞”按钮时,确实会显示可见错误,但“赞”计数现在显示 undefined,在我的 chrome 开发工具中显示 failed to load response data because this request was redirected

像这样更新你的代码,我怀疑你喜欢table在你的问题中提供它。

在你的views.py

里面
@login_required
def like(request):
    if request.method == 'POST':
        result = ""
        course_id = int(request.POST.get('courseid'))
        course = get_object_or_404(Course, id=course_id)

        if course.like.filter(id=request.user.id).exists():
            course.like.remove(request.user)
            course.like_count -= 1
            result = course.like_count
            course.save()
        else:
            course.like.add(request.user)
            course.like_count += 1
            result = course.like_count
            course.save()
        return JsonResponse({'result': result})

在你的course-detail.html

里面
<script type="text/javascript">

    $("#like-button").on("click", function (e) {
        e.preventDefault()
        $.ajax({
            type: 'POST',
            url: "{% url 'course:like' %}",
            data: {
                courseid: $('#like-button').val(),
                csrfmiddlewaretoken: "{{ csrf_token }}",
            },
            success: function (json) {
                document.getElementById("like-count").innerHTML = json['result']
                console.log(json)
            },
            error: function (xhr, errmsg, err) {
                console.log(xhr)
                console.log(errmsg)
                console.log(err)
            }

        })
    })

</script>

注:

  1. 您不必检查操作,而是可以检查方法,例如。 request.method.
  2. 您在 ajax 调用中提供了错误的 url '{% url 'course:like' course.slug %}' 它应该是 '{% url 'course:like' %}'没有通过鼻涕虫。
  3. 不要使用id作为变量,因为它会与python id() function, you can check for all available built-in functions in python here.
  4. 冲突