Laravel如何将AJAX返回数据传入Blade用foreach遍历更新自行车库存
解决方案
1. 视图代码修改
你当前视图中所有分类的可用数量标签都用了重复的id="numberqty",HTML中id属性必须全局唯一,所以首先要给每个分类的数量标签加上唯一标识,同时不建议在Blade视图中直接写SQL查询,这部分逻辑可以迁移到后端控制器首次加载页面时处理:
@foreach ($category as $cat) <div class="col pb-5 m-1"> <div class="card cat m-auto position-relative " id="cat{{$cat->id}}" > <!-- 给数量标签的id加上分类id,保证唯一 --> <p class="m-3 numberqty" id="numberqty{{$cat->id}}" style="font-weight: bold;color:#ce2e30;text-shadow: 2px 5px 3px rgba(150, 150, 150, 0.92);"></p> <!-- 其余原有代码保持不变 --> ... </div> </div> @endforeach
2. AJAX请求回调修改
后端返回的qty是分类ID为键、可用数量为值的对象,直接遍历这个对象,批量更新对应分类的数量即可:
$.ajax({ "url": "bookingCheck", "data": { "start": startCorrect, "end":endCorrect }, "method": "GET", success: function (response) { let qty = response.qty; // 遍历返回的库存对象 for (let catId in qty) { // 找到对应分类的数量标签,更新值 $(`#numberqty${catId}`).text(`x${qty[catId]}`); // 可额外加库存为0时的禁用逻辑 if(qty[catId] == 0) { $(`#cat${catId}`).addClass('disabled'); $(`#quantity${catId}`).attr('disabled', true); } else { $(`#cat${catId}`).removeClass('disabled'); $(`#quantity${catId}`).attr('disabled', false); } } } });
3. 控制器逻辑优化(可选)
你当前的库存查询逻辑存在统计误差:
- 原
whereRaw条件只判断了起始日期是否在订单区间内,没有覆盖两个时间段交叉的所有情况,建议替换为判断时间段重叠的通用条件:$contractdate = DB::table('contracts') ->where(function($query) use ($date1, $date2) { $query->whereBetween('data_inizio', [$date1, $date2]) ->orWhereBetween('data_fine', [$date1, $date2]) ->orWhere(function($q) use ($date1, $date2) { $q->where('data_inizio', '<=', $date1) ->where('data_fine', '>=', $date2); }); })->get(); - 原循环中只取了最后一个订单的ID统计已租车辆,会漏掉同时间段其他订单的已租车辆,建议统计所有重叠订单的已租车辆ID,再按分类统计可用库存。
内容的提问来源于stack exchange,提问作者alessio scionti
相关产品推荐
相关产品推荐

