php - 如何在锚标签上设置最大值?
问题描述
在我的购物车页面上,我想更新产品数量。它正在工作,但我想,当产品数量达到最大值(与产品表上的数量相同)时,它会抛出一条错误消息。
我的刀片视图:
<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>
解决方案
试试这个代码。这里我使用提前返回模式。你可以在这里阅读更多关于它的信息。
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);
}
推荐阅读
- telegram-bot - /setprivacy 不适用于我的 Telegram 机器人
- class - OOPs 概念如何与内存相关?和构造函数?
- python - 找到每个类别的唯一价值
- jmeter - CSV文件中的JMeter线程数(用户)变量不起作用
- java - 使用 ServiceLoader 从 Jar 加载图像文件
- java - 为什么按位与运算不适用于 Value>=8?
- c# - C#从基类访问派生类变量
- java - Spring 安全应用程序为 org.springframework.security.authentication.UsernamePasswordAuthenticationToken 提供 No AuthenticationProvider
- github - 添加 grep 命令时,Github 工作流变得无效
- php - 如何将数组转换为php多维键值