0

I have had a hunt around but can't seem to find an answer that works. I am following Dennis Ivy's Django tutorial for an e-commerce website but I have run in to an issue where I am trying to add an item to my cart but nothing happens, checking the console I am getting these two errors:

POST http://127.0.0.1:8000/update_item/ 500 (Internal Server Error)

updateUserOrder @ cart.js:26 (The fetch line)

(anonymous) @ cart.js:15 (when the function is called)

127.0.0.1/:1 Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

omise.then (async)

updateUserOrder @ cart.js:39 (the second .then)

(anonymous) @ cart.js:15 (when the function is called)

Here is my JavaScript cart.js updateUserOrder function:

function updateUserOrder(productId, action) {
        console.log('User is logged in, 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()
            });
    }

Here is my view updateItem:

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 = Product.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)

Here is my URL including import:

from checkout.views import updateItem

path('update_item/', updateItem, name="update_item"),

Thanks in advance!

1
  • Did you solve it? I'm getting the same two error. Commented Jan 28, 2021 at 9:42

2 Answers 2

7

About first error POST http://127.0.0.1:8000/update_item/ 500 (Internal Server Error), you need to check server logs.

About second error 127.0.0.1/:1 Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0, the Promise returned from fetch() won’t reject on HTTP error status even if the response is an HTTP 500. Instead, it will resolve normally (with ok status set to false). So you need to add codes checking the response in then() like below.

...
            .then((response) => {
                if (!response.ok) {
                    // error processing
                    throw 'Error';
                }
                return response.json()
            })
...
Sign up to request clarification or add additional context in comments.

Comments

0

In ur JavaScript file in location.reload() You shouldn't add a semi-colon after that curly brace and parentheses })

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.