首页 > 解决方案 > 如何在锚标签上设置最大值?

问题描述

在我的购物车页面上,我想更新产品数量。它正在工作,但我想,当产品数量达到最大值(与产品表上的数量相同)时,它会抛出一条错误消息。

我的刀片视图:

<form action="#" method="POST">
    <div class="plus-minus">
        <a class="dec qtybutton" href="javascript:void (0)" onclick="CartDecrementQuantity('{{$cart->id}}')">-</a>
        <input type="text" value="{{$cart->product_quantity}}" name="qtybutton" class="plus-minus-box" readonly>
        <a class="inc qtybutton" href="javascript:void (0)" onclick="CartIncrementQuantity('{{$cart->id}}')">+</a>
    </div>
</form>

我没有使用输入标签,这就是我将其设为只读的原因

路线:增加购物车数量的 Ajax 路线。

Route::post('increase_quantity',['as' => 'increase_quantity', 'uses' => 'User\UserController@increase_quantity']);
Route::post('decrement_quantity',['as' => 'decrement_quantity', 'uses' => 'User\UserController@decrement_quantity']);

控制器:

public function increase_quantity(Request $request)
{
    $cart = Cart::with('product')->find($request->cart_id) ;
    if ($cart->product_quantity < $cart->product->quantity) {
        $cart->increment('product_quantity');
    }
    $unit_price=$cart->product_quantity*$cart->product->sellPrice;
    $per_product_quantity=$cart->product_quantity;
    $cart_quantity=Cart::with('product')->get();
    $total_price = 0;
    foreach ($cart_quantity as $cart) {
        $total_price += $cart->product_quantity*$cart->product->sellPrice;
    }
    return response()->json([
        //'cart_quantity' => $cart_quantity,
        'total_price'=>$total_price,
        'unit_price'=>$unit_price,
        'id'=>$request->cart_id,
        'product_quantity'=>$per_product_quantity
    ]);
}
public function decrement_quantity(Request $request)
{
    $cart = Cart::with('product')->find($request->cart_id) ;
    if ($cart->product_quantity >1) {
        $cart->decrement('product_quantity');
    }
    $unit_price=$cart->product_quantity*$cart->product->sellPrice;
    $per_product_quantity=$cart->product_quantity;
    $cart_quantity=Cart::with('product')->get();
    $total_price = 0;
    foreach ($cart_quantity as $cart) {
        $total_price += $cart->product_quantity*$cart->product->sellPrice;
    }
    return response()->json([
        //'cart_quantity' => $cart_quantity,
        'total_price'=>$total_price,
        'unit_price'=>$unit_price,
        'id'=>$request->cart_id,
        'product_quantity'=>$per_product_quantity
    ]);
}

阿贾克斯代码:

<script type="text/javascript">
function CartIncrementQuantity(id){
var cart_id = id;
        $.ajax({
            type: "POST",
            url: "{{ route('increase_quantity') }}",
            data: {
                _token: '{{csrf_token()}}',
                cart_id: cart_id,
            },
            success: function (response) {
                console.log(response['product_quantity']);
                $('#product_price'+response['id']).text(response['unit_price']);

                $('#menubar_product_quantity'+response['id']).text(response['product_quantity']);

                $('#unit_price'+response['id']).text(response['unit_price']);
                $('#menubar_total').text(response['total_price']);
                $('#menubar_total1').text(response['total_price']);
                $('#subtotal').text(response['total_price']);
            },
            error:function (response) {
            }
        });
    }

function CartDecrementQuantity(id){
    var cart_id = id;
    $.ajax({
        type: "POST",
        url: "{{ route('decrement_quantity') }}",
        data: {
            _token: '{{csrf_token()}}',
            cart_id: cart_id
        },
        success: function (response) {
            $('#product_price'+response['id']).text(response['unit_price']);
            $('#menubar_product_quantity'+response['id']).text(response['product_quantity']);
            $('#unit_price'+response['id']).text(response['unit_price']);
            $('#menubar_total').text(response['total_price']);
            $('#menubar_total1').text(response['total_price']);
            $('#subtotal').text(response['total_price']);
        },
        error:function (response) {
        }
    });
}
</script>

标签: phpjqueryajaxlaravele-commerce

解决方案


试试这个代码。这里我使用提前返回模式。你可以在这里阅读更多关于它的信息。

public function increase_quantity(Request $request)
{
    $cart = Cart::with('product')->find($request->cart_id) ;
    // If we reached the limit, we can throw Exception, or return JsonResponse with error message
    if ($cart->product_quantity === $cart->product->quantity) {
        return new JsonResponse(['error' => ['message' => 'Your error message']], 422);
        // Or throw new \Exception('Your error message', 422);
    }
    // All code below will work only if $cart->product_quantity < $cart->product->quantity
    $cart->increment('product_quantity');
    $unit_price=$cart->product_quantity*$cart->product->sellPrice;
    $per_product_quantity=$cart->product_quantity;
    $cart_quantity=Cart::with('product')->get();
    $total_price = 0;
    foreach ($cart_quantity as $cart) {
        $total_price += $cart->product_quantity*$cart->product->sellPrice;
    }

    return new JsonResponse([
        //'cart_quantity' => $cart_quantity,
        'total_price'=>$total_price,
        'unit_price'=>$unit_price,
        'id'=>$request->cart_id,
        'product_quantity'=>$per_product_quantity
    ], 201);
}

推荐阅读