我有一个模板cat1.html产品列表。当客户选择一项商品时,它构建一个具有所选产品属性的对象。如果客户单击"添加到购物车"按钮,axios将请求+参数字符串化产品对象发送到/cart
ulElement.addEventListener('click', function(event) {
let targetClasses = Array.from(event.target.classList);
if(targetClasses.includes('dropdown-item')) {
/* code to build the item */
}
if(targetClasses.includes('btn-cart')) {
axios.get('/cart', { params: { item: JSON.stringify(item) } } );
}
});
到目前为止,这个工作很好,我可以从服务器打印对象/json,所以我知道它使它通过。
def cart(request):
item_dict = json.loads(request.GET.get('item'))
user_cart.append(item_dict)
print(user_cart); # this seems to work fine
/* return redirect('cart') this results in error TypeError(f'the JSON object must be str, bytes or bytearray, ' */
当我尝试添加重定向到/cart视图时,问题发生了。我得到错误
JSON对象必须str,字节或中bytearray,而不是NoneType
我试图绕过这个使用窗口。位置。href,也包装在一个按钮,但我得到同样的错误,所以我得到的感觉我使用错误的方法。
您不能将重定向作为ajax响应发送。你可以发送回消息或状态,你应该在成功回调函数的前面使用它们。
这是因为您重定向到'cart'视图的参数中没有JSON。因此,发生的情况是,重定向成功,但在重定向的实例中,'item'参数为None,因此json.loads()抛出错误。