500 (Внутренняя ошибка сервера) и Неожиданная лексема < в JSON в позиции 0

Я пытаюсь создать сайт на основе справочников. Когда дело дошло до обновления корзины через кнопки (уменьшение и увеличение), то при попытке нажать на них, выдаются ошибки: Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0, which refers to

.then((data) => {
        location.reload()
    });

cart.js:24 POST http://127.0.0.1:8000/update_item/ 500 (Внутренняя ошибка сервера) который относится к

fetch(url, {
        method:'POST',
        headers:{
            'Content-Type':'application/json',
            'X-CSRFToken': csrftoken,
        },

и у меня ошибка в консоли pycharm строка 104, в updateItem productId = data['productId'] KeyError: 'productId'

code cart.js:

var updateBtns = document.getElementsByClassName('update-cart')

for (i = 0; i < updateBtns.length; i++) {
    updateBtns[i].addEventListener('click', function () {
        var productId = this.dataset.stuff
        var action = this.dataset.action
        console.log('productId:', productId, 'Action:', action)

        console.log('USER:', user)
        if (user == 'AnonymousUser') {
            console.log('User is not authenticated')

        } else {
            updateUserOrder(productId, action)
        }

    })
}

function updateUserOrder(productId, action){
    console.log('User is authenticated, sending data...')

        var url = '/update_item/'

        fetch(url, {
            method:'POST',
            headers:{
                'Content-Type':'application/json',
                'X-CSRFToken': csrftoken,
            },
            body:JSON.stringify({'productId':productId, 'action':action})
        })
        .then((response) => {
           return response.json();
        })
        .then((data) => {
            location.reload()
        });
}

views.py

def updateItem(request):
    data = json.loads(request.body)
    productId = data['productId']
    action = data['action']
    print('Action:', action)
    print('Product:', productId)

    customer = request.user.customer
    product = Stuff.objects.get(id=productId)
    order, created = Order.objects.get_or_create(customer=customer, complete=False)

    orderItem, created = OrderItem.objects.get_or_create(order=order, product=product)

    if action == 'add':
        orderItem.quantity = (orderItem.quantity + 1)
    elif action == 'remove':
        orderItem.quantity = (orderItem.quantity - 1)

    orderItem.save()

    if orderItem.quantity <= 0:
        orderItem.delete()

    return JsonResponse('Item was added', safe=False)

Заранее благодарю

Какая у вас версия Python? Начиная с Python 3.0 json.loads() принимает только строку в юникоде. Возможно, проблема в том, что вам нужно сначала декодировать request.body:

data = json.loads(request.body.decode('utf-8'))

Если проблема не в этом, попробуйте проверить, что вы получаете. Потому что символ "<" выглядит как html или xml. Например, измените вашу функцию на:

def updateItem(request):
 data = json.loads(request.body)
 return HttpResponse(data)
Вернуться на верх