После создания блога с использованием Ajax я не могу делать другие вызовы Ajax, а JsonResponse возвращает пустую строку - PullRequest
0 голосов
/ 02 мая 2020

Я создал сайт, на котором пользователи могут публиковать сообщения. После использования Ajax для создания объекта записи кажется, что мне это не нравится. В основном мое представление django возвращает пустую JsonData. Поэтому мне нужно обновить страницу sh, чтобы она заработала. Ниже приведено то, что я использую для отправки моих ajax вызовов.

для создания сообщения:

var SaveForm =  function(e){
    e.preventDefault();
    e.stopImmediatePropagation();
    var form = new FormData(this);
    $.ajax({
        url: $(this).attr('data-url'),
        type: $(this).attr('method'),
        data: form,
        cache: false,
        processData: false,
        contentType: false,
        dataType: 'json',
        success: function(data){
            if(data.form_is_valid){
                $('#post-list div').html(data.posts);
                $('#modal-post').modal('hide');
            } else {
                $('#modal-post .modal-content').html(data.html_form)
            }
            $('.post-like-form').on("click", ".likeBtn", function (e) {
                var like_count = $(".input-like-count", this).val();
                $(".like-count-d").text(like_count);
                e.preventDefault();
                if($(this).find("i").hasClass("fa-thumbs-up")){
                    like_count++;
                    $(".input-like-count", this).val(like_count);
                    $("i", this).removeClass("fa-thumbs-up").addClass("fa-thumbs-down")
                    $(".like-count", this).text(like_count);
                    $(".like-count-d").text(like_count);
                } else {
                    like_count--;
                    $(".input-like-count", this).val(like_count);
                    $("i", this).removeClass("fa-thumbs-down").addClass("fa-thumbs-up")
                    $(".like-count", this).text(like_count);
                    $(".like-count-d").text(like_count);
                }
                var tk = $(this).attr("data-token");
                var pg = $(this).attr('value');
                $.ajax({
                    type: "POST",
                    url: $(this).attr("data-url"),
                    dataType: 'json',
                    data: {'guid_url': pg, 'csrfmiddlewaretoken':tk },
                    success: function (data){
                        var like_count = parseInt($(".like-count", this).text());
                        if($(this).find("i").hasClass("fa-thumbs-up")){
                            like_count++;
                            $(".input-like-count", this).val(like_count);
                            $("i", this).removeClass("fa-thumbs-up").addClass("fa-thumbs-down")
                            $(".like-count", this).text(like_count);
                        } else {
                            like_count--;
                            $(".input-like-count", this).val(like_count);
                            $("i", this).removeClass("fa-thumbs-down").addClass("fa-thumbs-up")
                            $(".like-count", this).text(like_count);
                        }
                        $("#post-detail-container div").html(data.post_detail)
                    },
                    error: function(rs, e){
                        console.log(rs.responeText);
                    },
                });
            });
        }
    })
    return false;
}

, который успешно создает объект сообщения (в основном это занимает много времени Ajax запрос занимает много времени). После того, как сообщение создано, я больше не могу любить сообщения, если я не переосмыслил sh страницу!

Вот мой звонок как js ajax (который, я считаю, не вызывает проблемы, поскольку он работает если вы ссылаетесь sh на страницу:

$(document).ready(function (e) {
    $('.post-like-form').on("click", ".likeBtn", function (e) {
        var like_count = $(".input-like-count", this).val();
        $(".like-count-d").text(like_count);
        e.preventDefault();
        if($(this).find("i").hasClass("fa-thumbs-up")){
            like_count++;
            $(".input-like-count", this).val(like_count);
            $("i", this).removeClass("fa-thumbs-up").addClass("fa-thumbs-down")
            $(".like-count", this).text(like_count);
            $(".like-count-d").text(like_count);
        } else {
            like_count--;
            $(".input-like-count", this).val(like_count);
            $("i", this).removeClass("fa-thumbs-down").addClass("fa-thumbs-up")
            $(".like-count", this).text(like_count);
            $(".like-count-d").text(like_count);
        }
        var tk = $(this).attr("data-token");
        var pg = $(this).attr('value');
        $.ajax({
            type: "POST",
            url: $(this).attr("data-url"),
            dataType: 'json',
            data: {'guid_url': pg, 'csrfmiddlewaretoken':tk },
            success: function (data){
                var like_count = parseInt($(".like-count", this).text());
                if($(this).find("i").hasClass("fa-thumbs-up")){
                    like_count++;
                    $(".input-like-count", this).val(like_count);
                    $("i", this).removeClass("fa-thumbs-up").addClass("fa-thumbs-down")
                    $(".like-count", this).text(like_count);
                } else {
                    like_count--;
                    $(".input-like-count", this).val(like_count);
                    $("i", this).removeClass("fa-thumbs-down").addClass("fa-thumbs-up")
                    $(".like-count", this).text(like_count);
                }
                $("#post-detail-container div").html(data.post_detail)
            },
            error: function(rs, e){
                console.log(rs.responeText);
            },
        });
    });
})

Это мои взгляды на симпатию и создание сообщения:

@login_required
def post_create(request):
    data = dict()
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():  
            post = form.save(False)
            post.author = request.user
            post.save()
            if request.FILES is not None:
                added = []
                images = request.FILES.getlist('images[]')
                for i in images:
                    if i not in added:
                        print(i)
                        image_instance = Images.objects.create(image=i,post=post)
                        image_instance.save()
                        added.append(i)
            data['form_is_valid'] = True
            posts = Post.objects.all()
            posts = Post.objects.order_by('-last_edited')
            data['posts'] = render_to_string('home/posts/home_post.html',{'posts':posts},request=request)
        else:
            data['form_is_valid'] = False
    else:
        form = PostForm      
    context = {
    'form':form,
    }
    data['html_form'] = render_to_string('home/posts/post_create.html',context,request=request)
    return JsonResponse(data) 

@login_required
def post_like(request,guid_url):
    data = dict()
    post = get_object_or_404(Post, guid_url=guid_url)
    user = request.user
    if post.likes.filter(id=user.id).exists():
        post.likes.remove(user)
    else:
        post.likes.add(user)
    #posts = Post.objects.all()
    #posts = Post.objects.order_by('-last_edited')
    #data['posts'] = render_to_string('home/posts/home_post.html',{'posts':posts},request=request)
    if request.is_ajax():
        guid_url = post.guid_url
        data['post_detail'] = render_to_string('home/posts/post_detail.html',{'post':post,'guid_url':guid_url},request=request)
        return JsonResponse(data)

, что происходит после публикации, когда мне нравится публикация переходит к post_like url, а не просто к посту. Я не знаю, что вызывает эту проблему, поскольку я не получаю ошибок ни в консоли, ни в терминале.

Я заранее благодарен за всю помощь!

1 Ответ

0 голосов
/ 02 мая 2020

просто обратите внимание, что для этого нужна точка с запятой с внутренней линией ajax.

data['posts'] = render_to_string('home/posts/home_post.html',{'posts':posts},request=request);
...