我目前正在使用jQuery,Ajax和PHP实现购物车,并且大部分工作正在进行。然而,我目前卡在如何更新购物车页面内容时,我更新购物车,因为此刻我返回的HTML更新侧栏中的购物车区域(工作正常)。如何使用一个jquery ajax调用来更新页面上的多个区域?
所以我的问题是如何更新表格,同时在网站的主要内容区域显示所有的购物车项目?
我的jQuery(用于更新车):
$('.update_cart').submit(function (e) {
e.preventDefault();
$.ajax({
cache: false,
url: 'inc/shopping_bag.php',
data: $(this).serialize() + '&action=update',
type: 'POST',
success: function(html) {
$('#shopping-bag p').html(html);
}
});
});
我的PHP更新:
elseif (!empty($action) && $action == 'update') {
if (is_array($_POST['item_qty'])) {
foreach ($_POST['item_qty'] as $key=>$quantity) {
$quantity=ceil($quantity);
if ($quantity==0) {
unset($_SESSION['basket'][$key]);
} else {
$_SESSION['basket'][$key]['item_qty']=$quantity;
}
}
}
update_basket();
}
function update_basket() {
foreach ($_SESSION['basket'] as $array)
{
$totalItems+=$array['item_qty'];
$cost=$array['item_qty']*$array['unit_price'];
$total+=$cost;
}
echo 'Shopping Bag<br>'.$totalItems.' Items<br />£'.sprintf("%01.2f", $total);
}
我的购物车页面(对不起有点长):
<div id="content">
<section>
<div class="content-seperator">
<h1>Shopping Bag</h1>
</div>
<div id="inner-content">
<section>
<?php if (count($_SESSION['basket']) > 0) { ?>
<form action="#" class="update_cart">
<table id="cart">
<thead>
<tr>
<th width="60">Quantity</th>
<th>Item</th>
<th width="70">Unit Price</th>
<th width="60">Total</th>
<th class="blank" width="90"> </th>
</tr>
</thead>
<tbody>
<?php
$total=0;
$count=0;
foreach ($_SESSION['basket'] as $array)
{
$check_id = substr($array['item_id'], 0, 5);
$cost=sprintf("%01.2f", $array['item_qty']*$array['unit_price']);
$total+=$cost;
if (!empty($array['image'])) {
if (file_exists($array['image'])) {
$image_path = $array['image'];
} else {
$image_path = '<img src="images/missing.gif" alt="missing image" />';
}
} else {
$image_path = '<img src="images/missing.gif" alt="missing image" />';
}
$image = getImagesize($image_path);
$dimensions = imgResize($image[0], $image[1], 80);
if ($check_id=='parts') {
?>
<tr>
<td class="align-centre">
<input name="item_qty[<?php echo $count; ?>]" type="text" size="1" value="<?php echo $array['item_qty']; ?>" class="formfield align-centre" />
<input name="unit_price[<?php echo $count; ?>]" type="hidden" value="<?php echo $array['unit_price']; ?>" />
</td>
<td>
<span class="basket_img"><img src="<?php echo $image_path; ?>" <?php echo $dimensions; ?> alt="Diesel Injector Image" /></span>
<strong><?php echo $array['category']; ?> Injector</strong><br />
<span class="basketlabel">Part No:</span> <strong><?php echo $array['item_name']; ?></strong>
</td>
<td>£<?php echo str_replace("£ ","",$array['unit_price']); ?></td>
<td><strong>£<?php echo $cost; ?></strong></td>
<td><a href="?removeItem=<?php echo $array['item_id']; ?>" class="basket_remove">Remove Item</a></td>
</tr>
<?php
} if ($check_id=='prods') { ?>
<tr>
<td class="align-centre">
<input name="item_qty[<?php echo $count; ?>]" type="text" size="1" value="<?php echo $array['item_qty']; ?>" class="formfield align-centre" />
<input name="unit_price[<?php echo $count; ?>]" type="hidden" value="<?php echo $array['unit_price']; ?>" />
</td>
<td>
<span class="basket_img"><img src="<?php echo $image_path; ?>" <?php echo $dimensions; ?> alt="Diesel Product Image" /></span>
<strong><?php echo $array['category']; ?></strong><br />
Product Code: <strong><?php echo $array['item_name']; ?></strong>
</td>
<td>£<?php echo sprintf("%01.2f", $array['unit_price']); ?></td>
<td><strong>£<?php echo $cost; ?></strong></td>
<td><a href="?removeItem=<?php echo $array['item_id']; ?>" class="basket_remove">Remove Item</a></td>
</tr>
<?php }
$count++;
} ?>
</tbody>
</table>
<input type="submit" name="update_cart" value="Update Shopping Bag" class="rounded-buttons" />
<input type="button" name="empty_cart" value="Empty Shopping Bag" class="rounded-buttons" />
</form>
<?php } else { ?>
<p class="no_items">You have no items in your shopping bag</p>
<?php } ?>
</section>
</div>
任何帮助非常感谢,谢谢。
你究竟想在桌上做什么?隐藏该行或将其标记为已添加?提供更多详情 – redDevil 2012-03-10 10:17:53
对不起,你是对的我应该更具体。如果数量发生变化并点击“更新包”,或者如果项目被移除,则更新数据表中每个产品的数量和价格。我的问题是不这样做,但如何做到这一点,以及更新侧边栏中的购物车格。 – 2012-03-11 06:21:10
使用JSON作为响应而不是HTML。所以你应该有这样的:'response = [{product:'a',price:1},{product:'b',price:2},...]',所以你可以重新使用它。 – 2012-03-11 08:59:18