首页 > 解决方案 > JSONDecodeError Django Javascript JSON

问题描述

我在 /charge 时收到 JSON 解码错误data = json.loads(request.body)。我正在使用 stripe api 以及 fetch api。

完整的错误是这样的:

Traceback (most recent call last):
  File "/home/antariksh/Desktop/Python Files/Owlet/env/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/antariksh/Desktop/Python Files/Owlet/env/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/antariksh/Desktop/Python Files/Owlet/env/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/antariksh/Desktop/Python Files/Owlet/env/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/antariksh/Desktop/Python Files/Owlet/Menu/views.py", line 151, in charge
    data = json.loads(request.body)
  File "/usr/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.7/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

这就是错误。我的 /charge/ 视图代码是这样的:

@csrf_exempt
def charge(request):
    if request.method == 'POST':
        print(request.POST)

        transaction_id = uuid.uuid4().hex
        data = json.loads(request.body)
        print(data)

        if request.user.is_authenticated:
            customer = request.user.customer
            order, created = Order.objects.get_or_create(customer=customer, isComplete=False, status='Created')

        else:
            order, customer = guestOrder(request, data)

        total = data['form']['total']
        order.transaction_id = transaction_id
        order.isComplete = True
        order.status = 'Accepted'
        order.save()

        ShippingAddress.objects.create(
                customer = customer,
                order = order,
                address = data['shipping']['address'],
                city = data['shipping']['city'],
                state = data['shipping']['state'],
                zipcode = data['shipping']['zipcode'],
            )
    
    mailOrder(data['form']['email'], order)

    return redirect(reverse('menupage'))

JSON 很好,因为我检查了所有已解析的内容以及运行代码时的内容。它将数据保存在数据库中,但仍显示错误页面。javascript是这样的:

var url = '/charge/'

            fetch(url, {
                method:'POST',
                headers:{
                    'Content-Type':'application/json',
                    'X-CSRFToken': csrftoken
                }, 
                body:JSON.stringify({'form':userData, 'shipping':shippingData}),
            })

            .then((response) => {
                response.json()
                })

            .then((data) => {
                console.log(data)
                swal({
                    icon: "success",
                    text: "Transaction Completed"
                });

                cart = {}
                document.cookie = 'cart=' + JSON.stringify(cart) + ";domain=;path=/"
            });

上面的 javascript 在语法方面很好。如果 JSON 中有问题或任何问题,请提供帮助。非常感谢您的帮助。请看看并告诉我出了什么问题。任何建议也非常感谢。我没有分享条带 API 代码。

标签: pythonjsondjango

解决方案


推荐阅读