django 获取返回500(内部服务器错误)JavaScript

3ks5zfa0  于 2022-12-05  发布在  Go
关注(0)|答案(2)|浏览(399)

我找了一圈,但似乎找不到一个有效的答案。我正在遵循Dennis Ivy的Django电子商务网站教程,但我遇到了一个问题,我试图添加一个项目到我的购物车,但没有发生,检查控制台,我得到以下两个错误:
POST http://127.0.0.1:8000/update_item/ 500(内部服务器错误)
js:26(获取行)
(匿名)@ cart.js:15(调用函数时)
127.0.0.1/:1 未捕获(在承诺中)语法错误:JSON中位置0处的意外标记〈
然后省略(异步)
js:39(第二个.然后)
(匿名)@ cart.js:15(调用函数时)
下面是我的JavaScript cart.js updateUserOrder函数:

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()
            });
    }

下面是我的观点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)

以下是我的URL,包括导入:

from checkout.views import updateItem

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

提前感谢!

b09cbbtk

b09cbbtk1#

关于第一个错误POST http://127.0.0.1:8000/update_item/ 500 (Internal Server Error),您需要检查服务器日志。
关于第二个错误127.0.0.1/:1 Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0,从fetch()返回的Promise不会在HTTP错误状态下拒绝,即使响应是HTTP 500。相反,它将正常解决(ok状态设置为false)。因此,您需要添加代码来检查then()中的响应,如下所示。

...
            .then((response) => {
                if (!response.ok) {
                    // error processing
                    throw 'Error';
                }
                return response.json()
            })
...
xlpyo6sf

xlpyo6sf2#

在ur JavaScript文件的location.reload()中,不应在大括号和圆括号后添加分号})

相关问题