如何在不刷新的情况下增加订单详细信息的数量

Posted

技术标签:

【中文标题】如何在不刷新的情况下增加订单详细信息的数量【英文标题】:how do I increase number of order detail without refreshing 【发布时间】:2022-01-19 16:34:54 【问题描述】:

我是 Django 的初学者,我创建结帐页面,当用户更改输入范围号时 enter image description here 它发送到服务器,但它适用于第一个 我想是因为我为所有输入设置了相同的 id 并且我无法更改它,因为它在标签中

我该如何解决?

Django 部分

class Ajax_Handler(View):
    def get(self,request):
        if request.is_ajax():            
          count=request.GET['count']
          return JsonResponse('count':count,status=200) 


  

ajax部分

$(document).ready(function()
            var crf=$('input[name=csrfmiddlewaretoken]').val();
            $("#icount").change(function()
               $.ajax(
                   url:'/adding',
                   type:'get',
                   data:
                       count:$('#icount').val(),
                       
                   ,
                   success:function(respond)
                        $('#icount').val(respond.count)
                   
               );

            );
       );
    

html部分

<tbody>
% for order in order.orderdetail_set.all %        
 <tr>
<td class="product-image">
 % thumbnail order.product.image "100x100" crop="center" as im %
<img src=" im.url "  >
% endthumbnail %
</td>
<td class="product-name"><a href="products/order.product.id">order.product.title</a></td>
<td class="product-price">order.product.price|intcomma:Falseتومان</td>
                                            
<td class="product-quantity">                                          
<label>تعداد</label>
<input type="hidden" name="order_idorder.id" value="order.id">
 <input name='count' id='icount' min="1" max="100" value="order.count" type="number">
                                                 
</td>
<td class="product-total">order.totalprice|intcomma:False</td>
<td class="product-remove"><a href="delete/order.id"><i class="fa fa-trash-o"></i></a></td>
</tr>
                                        
% endfor %
                                        
                                       
</tbody>

【问题讨论】:

【参考方案1】:

你可以这样做

<input name='count' id='icount' min="1" max="100" value="order.count" type="number" onchange="handleOrderCount(order.id)">

function handleOrderCount(OrderId)
    $.ajax(
        url:'/adding',
        type:'PUT',
        data:
            'OrderId': OrderId,
            'csrfmiddlewaretoken': ' csrf_token ',
            'count': $('#icount').val(),
        ,
        success:function(respond)
            $('#icount').val(respond.count)
        
        error:function(respond)
            console.log(respond)
        
    );

如果您想更改数据库中的任何内容,请不要使用 GET 方法,它用于从数据库或服务器检索数据,请使用 PUT 更新任何对象

POST - createGET - read@ 987654325@DELETE - delete 在你看来,你可以得到这样的

class Ajax_Handler(View):
    def get(self,request):
        if request.is_ajax() and request.method == "POST":            
          count = request.POST['count']
          # can filter object and update it like this 
          # order_id = request.POST['OrderId']
          # Order.object.filter(id=order_id)
          return JsonResponse('count':count,status=200) 

【讨论】:

谢谢你,它对我有用,但我收到了 Forbidden csrf token 错误 你在ajax调用中添加了这个'csrfmiddlewaretoken': ' csrf_token ', 已修复,感谢您的帮助

以上是关于如何在不刷新的情况下增加订单详细信息的数量的主要内容,如果未能解决你的问题,请参考以下文章

如何在不刷新php页面的情况下跟踪mysql数据库中的更改?

在不刷新页面的情况下将Youtube视频嵌入Angular JS的问题

如何在不使用 rest admin api 的情况下以编程方式(java)更新 keycloak 的用户详细信息?

订单列表查询SQL,查询出订单的数量和订单详细信息(包括订单中的所有商品)。

我可以在不通过 BscScan 的情况下以编程方式提取 BSC 交易详细信息吗?

显示客户下的所有订单的详细信息