1

Тема: Як перевірити чи повертає щось JsonResponse після ajax запиту?

Всім привіт. Спіткала така проблема, робив систему лайків для сайту, на окремому проекті все було і працювало безвідмовно. Переніс на реальний сайт, все працює, тільки чомусь не хоче обновляти поля з кількістю лайкнутих.
Ось код з view, який і приймає запит та повертає результат:

Прихований текст
def add_ajax(request, id):
    if request.is_ajax():
        like = Post.objects.get(id=id)

        user = UserProfile.objects.get(user_id=request.user.id)

        user.like -= 1
        user.save(update_fields=['like'])

        like.liking.add(user.user)

        like.author.like += 1
        like.author.save(update_fields=['like'])
        like.like += 1
        like.save(update_fields=['like'])

        response = {'count_like': str(like.like), 'author-like': like.author.like}
        return JsonResponse(response)

Ось сам JS код з Ajax:

Прихований текст
var url = document.createElement('a');
        url.href = document.URL;
        $(document).ready(function () {
            $("#like_this").click(function() {
                $.ajax({
                    type: 'GET',
                    async: true,
                    url: '/ajax'+url.pathname,
                    success: function(data) {
                        $("#like").html(data['count-like']);
                        $("#author-like").html(data['author-like']);
                    },
                    dataType: 'json'
                });
            });
        });

І ось місця де має це всьо діло обновлятись:

Прихований текст
<span [i]id="author_like"[/i]>[b]{{ post.author.like }}[/b]</span>
                    </h5>
                    <div class="author-box-info">
                        <table class="author-box-info-table">
                            <tr align="center">
                                {% if not push_like and not you_post%}
                                    <td>
                                        <span id="like_this" class="glyphicon glyphicon-thumbs-up c222"></span>
                                        <div [i]id="like"[/i]>[b]{{ post.like }}[/b]</div>
                                    </td>
                                {% else %}
                                    <td>
                                        <span class="glyphicon glyphicon-thumbs-up c777"></span>
                                        <div>{{ post.like }}</div>
                                    </td>
                                {% endif %}

Ну і рядок з роутера:

Прихований текст
    url(r'^ajax/post/id(?P<id>\d+)$', views.add_ajax),

Так ось,суть питання, чи можна подивитись якось що повертається і чи взагалі щось повертається з в'юшки після обробки запитів? Бо коли натискаю на лайк - не відбувається нічо, але запити на сервер приходять. І після перезавантаження сторінки лайк зараховується. Пробував в консолі Хрома js-ом заміняти дані в блоках - так без проблем міняє, а тут напевне зворотній запит від сервера не приходить...

2

Re: Як перевірити чи повертає щось JsonResponse після ajax запиту?

глибоко не вникав, але може спробувати зімітувати запит за допомогою Postman (чи подібного)

Прихований текст

Postman is the most complete toolchain for API development. Designed from the ground up to support all aspects of API development. Simple and intuitive GUI REST client. Send requests, save responses, add tests, and create workflows

там же і подивитися відповідь сервера.

Подякували: navchalkin1

3

Re: Як перевірити чи повертає щось JsonResponse після ajax запиту?

Якщо простіше, то можна забрати цей рядок:

if request.is_ajax():

і просто запитати

ajax/post/id/1

в браузері

4

Re: Як перевірити чи повертає щось JsonResponse після ajax запиту?

Q-bart написав:

Якщо простіше, то можна забрати цей рядок:

if request.is_ajax():

Тут перевірялось чи саме з цієї функції приходив запит. Там ще else було, і повертало Http404. І дякую за ідею, зараз спробую

5

Re: Як перевірити чи повертає щось JsonResponse після ajax запиту?

Спробував кидати запити з консолі, з функції все поверталось, з незрозумілих причин js не заміняв вміст блоків. Трохи побавився з консольки, і все почало працювати. І зразу ж запрацювало на продакшені. Той самий випадок, коли "я нічего нє трогал, оно само")) Всім дякую за допомогу!

Подякували: Monolith1