簡體   English   中英

Django返回JsonResponse並在Ajax請求中捕獲數據

[英]Django return JsonResponse and catch data in ajax request

這是我的看法。 我將JsonResponse返回給ajax請求,從我的視圖'line_product_total': total,中捕獲傳入數據'line_product_total': total,和其他上下文

    def get(self, request, *args, **kwargs):
    cart = self.get_object()
    product_id = request.GET.get('product')
    delete_product = request.GET.get('delete', False)
    product_added = False

    if product_id:
        product_instance = get_object_or_404(Product, id=product_id)
        amount = request.GET.get('amount', 1)
        try:
            if int(amount) < 1:
                delete_product = True
                return HttpResponse('IntegrityError', delete_product)
        except:
            raise Http404

        cart_product, created = CartProduct.objects.get_or_create(cart=cart, product=product_instance)
        if created:
            product_added = True
        if delete_product:
            cart_product.delete()
        else:
            cart_product.amount = amount
            cart_product.save()
        if not request.is_ajax():
            return HttpResponseRedirect(reverse('e_commerce:cart'))
            # return cart_product.cart.get_absolute_url
    if request.is_ajax():
        try:
            total = cart_product.line_product_total
        except:
            total = None
        data = \
            {
                'deleted': delete_product,
                'product_added': product_added,
                'line_product_total': total,

             }
        return JsonResponse(data)

    cart = Cart.objects.get(pk=cart.pk)
    return render(request, 'sales/cart.html', {'cart': cart})

js

     $('.type_number').change(function () {

    var product = $(this).next('input[type=hidden]').val();
    var amount = $(this).val();
    var data = {
        product:product,
        amount: amount
    };
    console.log(data);
    $.ajax({
        type: 'GET',
        url: '{% url "e_commerce:cart" %}',
        data: data,
        success: function (data) {
            $('#jquery-message').text('Added' + data.product_added + 'Deleted' + data.deleted);
            if (data.deleted) {
                $('#product-'+product).fadeOut;
            }
            else {
                $('#product-line-total-'+product).text(data.line_product_total);
            }
        },
        error: function(response, error) {
            $('#add-form').submit()
        }
    })
 })

模板

<form action="." method="GET">


 <h4 id="product-line-total-{{ product.id }}">{{ product.line_product_total }}</h4>

<input class="type_number" style="text-align: center;margin-left: -50px;" title="" type="number" name="amount" value="{{ product.amount }}">
        <input type="hidden" name="product" value="{{ product.product.id }}">
        <button type="submit"></button>
</form>

簡而言之,我無法在我的ajax中捕獲變量line_product_total,而只是說Unresolved variable line_product_total

但是我正在發送此變量。 什么問題? 伙計們至少告訴我問題本身無法解決的問題

先感謝您 :)

您的視圖代碼並不總是返回JsonResponse。 您應該跟蹤視圖的執行情況(在每個return語句之前添加一些print或-更好的是logging.debug() ),並記錄在客戶端獲得的有效響應,而不是盲目地假設您確實有200的json響應狀態。

同樣,您的代碼確實非常糟糕甚至危險。

首先,最重要的是,GET請求必須是冪等的(它不能更改服務器的狀態)。 使用GET處理從數據庫中創建/更新/刪除對象的請求確實很麻煩。

然后,異常處理程序將變得毫無用處,它們是有害的。 它們只會捕獲任何異常(包括SystemExit !),並且會靜默地忽略它們,因此您永遠不會知道何時,什么,如何以及為什么出現問題。 保持try塊盡可能短(如果可能,一個語句),僅捕獲期望的異常並知道如何處理, 記錄捕獲的所有內容(盡可能多的上下文信息),以及是否真的不知道帶有異常的處理方法只是讓其傳播。 用戶將收到一個500錯誤(是的,該發生的事情),並且(假設您的服務器和項目已正確配置),您將收到一封包含完整回溯信息的錯誤電子郵件,因此您知道出了點問題並有機會修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM