AJAX-запрос возвращает HTML-файл вместо данных. ( Django & Python )
У меня есть страница профиля с постами пользователя. Люди могут нравиться/не нравиться посты. Это работает хорошо, но перезагружает страницу, поэтому я внедряю AJAX.
Маршрут проходит следующим образом.
Внутри представления профиля находится запрос "like POST", заканчивающийся символом
data = { 'likes':post.likes.all().count() }
return JsonResponse(data,safe=False)"
При нажатии на кнопку "Мне нравится" я могу увидеть данные на пустой странице, если захочу. Таким образом, я знаю, что он получает их.
К сожалению, при использовании AJAX вместо возврата данных возвращается представление профиля
return render(request, "profile.html", context)
Вот мой код AJAX
const post_id = $(this).attr('id')
const likeText = $( `.like_button${post_id} `).attr('name')
const trim = $.trim(likeText)
const url = $(this).attr('action')
let res;
const likes = $(`.like_count${post_id}`).text() || 0
const trimCount = parseInt(likes)
$.ajax({
type: 'POST',
url: url,
data: {
'csrfmiddlewaretoken':$('input[name=csrfmiddlewaretoken]').val(),
'post_id':post_id,
},
success: function(data){
console.log('success', data)
},
error: function(data){
console.log('error', data)
}
})
Любая помощь будет очень признательна. Впервые использую AJAX, поэтому буду признателен за подробную информацию.
Не удивительно, что он возвращает HTML, поскольку это именно то, что вы возвращаете в представлении: отрендеренный HTML. Если вам нужен JSON, то вам нужен объект JSONResponse
.
https://docs.djangoproject.com/en/4.1/ref/request-response/#jsonresponse-objects
Так, вместо:
return render(request, "profile.html", context)
который возьмет profile.html
, введет значения из context
и отправит вам это в виде html, вы должны сделать что-то вроде:
response = JsonResponse({"mydata": "goes here", "some_more": data})
Затем вы можете разобрать это как JSON в вашем коде AJAX. Если в словаре context
содержатся все необходимые данные и это то, что вам нужно, вы можете просто заменить одну строку:
response = JsonResponse(context)