【发布时间】:2019-07-26 06:14:51
【问题描述】:
我正在使用会话处理购物车功能。我正在尝试制作更新购物车中商品数量并在页面标题上重新加载小计和购物车商品列表的功能。该功能更新会话并重新加载小计,但问题是它重新加载了购物车的商品列出旧会话的信息(在我更新之前)。我希望它获取新会话的信息。你能给我任何想法如何解决这个问题吗?非常感谢!
我尝试了 js setTimeout($('#cart-button').load(),2000) 来延迟该函数以查看它是否可以获取新会话,但它仍然无法正常工作。
P/s:我刚刚尝试将 $this->ajaxReloadCart($cart->totalQty, $this->money($cart->totalPrice), $cart->items); 放入 subOneItem() 函数中,它工作正常,但购物车列表现在位于小计 div 中
这是我的 js 函数:
$('#sub-1-{{$item['item']['id']}}').click(function(){
var qty = $('#qty-{{$item['item']['id']}}').val();
var int_qty = parseInt(qty);
if(int_qty > 1){
int_qty--;
$('input#qty-{{$item['item']['id']}}').val(int_qty);
$('#sub-total').load('sub-one/{{$item['item']['id']}}');
$('#cart-button').load('reload-mini');
}
if(int_qty <= 1){
int_qty = 1;
}
});
我的路线
Route::get('sub-one/{id}','PageController@subOneItem');
Route::get('reload-mini','PageController@reloadMiniCart');
和我的控制器功能:
-ajaxReloadCart:
public function ajaxReloadCart($totalQty, $totalPrice, $items){
echo ' <button type="button" class="btn btn-default">
<a href="view-cart">
<i class="fa fa-shopping-cart fa-lg"></i>
<div class="item-number">'
.$totalQty.
'</div>
</a>
</button>';
echo '<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>';
echo ' <ul class="dropdown-menu cart-items-list" id="cart-items-list">';
foreach($items as $item){
$price = $this->money($item['item']['price']);
echo ' <li>
<div class="row" style="margin-left:0; margin-top:10px;">
<div class="col-xs-4 col-sm-4 col-md-4 col-lg-4">
<img src="upload/product/'.$item['item']->productimg->first()->name.'" width="100" />
</div>
<div class="col-xs-8 col-sm-8 col-md-8 col-lg-8">
<div class="row">
<a href="product/'.$item['item']['id'].'"><strong>'.$item['item']['name'].'</strong></a>
</div>
<div class="row">'
.$price.' X '.$item['qty'].
'</div>
</div>
</div>
</li>';
}
echo ' <li><a><strong>Subtotal:</strong> <div class="pull-right">'.$totalPrice.'</div></a></li>
<li role="separator" class="divider"></li><li><a href="#">To Checkout</a></li></ul>';
}
-subOneItem:
public function subOneItem($id){
$product = Product::find($id);
$oldCart = Session::has('cart') ? Session::get('cart') : null;
$cart = new Cart($oldCart);
$cart->subOne($product, $id);
Session::put('cart',$cart);
$totalPrice = $this->money($cart->totalPrice);
// display mini cart and total price
echo $totalPrice;
}
-reloadMiniCart:
public function reloadMiniCart(){
$oldCart = Session::has('cart') ? Session::get('cart') : null;
$cart = new Cart($oldCart);
$this->ajaxReloadCart($cart->totalQty, $this->money($cart->totalPrice), $cart->items);
}
【问题讨论】:
标签: javascript php ajax laravel