【发布时间】:2021-04-27 04:51:16
【问题描述】:
我在商店中使用会话数组作为购物车。因此,每次我将新产品添加到购物车时,我都会更新购物车的总价值,如下所示:<a class="navbar-brand px-3" href="{{path('checkout')}}" id="cart">Cart{{total}}€</a>
问题是每次我添加新产品时页面都会重新加载,因为我的 add_product 函数中有return $this->redirectToRoute('eshop');。
我想添加产品并更新总价值,而不是重新加载整个页面。在这种情况下如何实现 jQuery 和 AJAX?以及add_product函数需要做哪些改动?
我试过了,但产品没有声明为变量。
<script>
$(document).ready(function() {
$('#btnAddProduct').click(function() {
var pos = $('{{product.id}}').val();
$.ajax({
url: "{{path('add_product', {'id' : 'id'}) }}",
type: "POST",
data: },
success: function() {
}
});
});
});
我的产品看起来像这样。
{% for product in products %}
<div class="col-lg-2">
<div class="card mb-3">
<img src="{{asset(product.image)}}" class="img-fluid" alt="{{product.name}}">
<h5 class="text-center" >{{product.name}}</h5>
<p class="text-center" >€{{product.price}}</p>
<form action="{{path('add_product', {'id' : product.id}) }}" method="post">
<button id="btnAddProduct" class="btn btn-primary btn-block" type="submit" >Add product</button>
</form>
</div>
</div>
{% endfor %}
还有我在 Symfony 中的 add_product 方法:
/**
* @Route("/eshop/add_product/{id}", name="add_product")
*/
public function add_product($id,Request $request){
$product = $this->eshop_model->get_product($id);
$total= $this->session->get('total');
$basket = $this->session->get('basket');
$check = 0;
foreach($basket as $k => $v){
if($v['id'] == $product['id']){
$basket[$k]['quantity']++;
$basket[$k]['subtotal'] += $product['price'];
$check = 1;
break;
}
}
if($check == 0){
$a = array('id' => $product['id'], 'quantity' => 1, 'subtotal' => $product['price'], 'price' => $product['price'], 'name' => $product['name']);
array_push($basket,$a);
}
$total= $total+ $product['price'];
$this->session->set('total',$total);
$this->session->set('basket',$basket);
return $this->redirectToRoute('eshop');
}
【问题讨论】:
标签: javascript jquery json ajax symfony