JSON значение не изменяется внутри ajax функция обратного вызова успеха - PullRequest
0 голосов
/ 21 апреля 2020

Я работаю над проектом django reddit clone, просто чтобы улучшить свои навыки. Я хотел реализовать AJAX, чтобы страница не обновлялась sh, когда кто-то голосует против. Я создал API с django каркасом отдыха, который имеет логические значения с повышенными и пониженными значениями. Тем не менее, когда я пытаюсь изменить значение upvoted на false в моем javascript, оно не работает, но при изменении значения false на true работает и обновляется шаблон. Это, вероятно, сбивает с толку, так что вот какой-то код.

class UpvoteAPIToggle(APIView):
def get(self, request, id=None, format=None):
    post = Post.objects.get(id=id)
    all_post_upvotes = post.upvotes.all()
    all_post_downvotes = post.downvotes.all()
    profile = Profile.objects.get(user=self.request.user)
    upvoted = False
    downvoted = False
    if profile not in all_post_upvotes:
        post.upvotes.add(profile)
        downvoted = False
        if profile in all_post_downvotes:
            post.upvotes.remove(profile)
            upvoted = False
            downvoted = True
    else:
        post.downvotes.remove(profile)
        upvoted = True

    serializer = PostSerializer(all_post_upvotes, many=True, read_only=True)
    serialized_upvotes = serializers.serialize("json", all_post_upvotes)
    upvote_counter = 0
    data = {
        "upvoted":upvoted,
        "downvoted": downvoted,
        "all_post_upvotes":serialized_upvotes,
        "upvote_counter":upvote_counter
    }
    return Response(data)

это основанное на классе представление покоя.

$.ajax({
            url: upvoteUrl,
            data: {},
            dataType: "json",
            success: 
            (data)=>{
                checkVote(data)
            }
        })

        function checkVote(data){
        if (data.upvoted){
            data.upvote_counter--;
            data.upvoted = false
        }else{
            data.upvote_counter++;
            data.upvoted = true
            $(".upvote-btn").css("color","orange");
            $("#upvoteCounter").text(data.upvote_counter)
        }
    }

Вот часть jquery из шаблона. Он вызывается при нажатии кнопки upvote. Я повторю это еще раз, чтобы напомнить вам, что когда за него не проголосовали, и вы щелкаете, оно превращается в истину, наоборот, не работает, когда это правда, оно остается верным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...