我有一个带有“添加到购物车”链接的产品页面,当点击它时,它会通过jquery将一个ajax请求发送到名为cart_process.php的页面,并将该项目添加到购物车。
购物车通过名为cart的cookie工作:
$_COOKIE['cart'];
存储添加产品的mysql记录ID以及连字符分隔符,如下所示:
11-36-33-
要显示购物车中的商品数量,我只需计算Cookie中连字符的数量:
substr_count($_COOKIE['cart'], '-');
我在头文件中回显这个名为header.php并在购物车页面中“包含”。
现在的问题是,当用户将一个项目添加到购物车时,cart_process.php文件会提醒消息“项目已成功添加”,但仍未更新从header.php显示的购物车中的项目数。
这是因为header.php文件没有刷新,我看到如何刷新它的唯一方法是刷新整个产品页面。但这会打败阿贾克斯的美丽。
所以我的问题是,有没有办法只刷新页面上的一个包含文件而不刷新页面本身。在这种情况下产品页面上的header.php?
答案 0 :(得分:2)
直接修改DOM;我倾向于使用元素上的类来识别它们,所以我可以做到
<span class='total_cart_quantity'>$value</span>
然后在JS的Ajax回调中
$(".total_cart_quantity").html(new_quantity)
大多数情况下,我倾向于从包含需要更新的元素列表的Ajax例程返回JSON,但只需从PHP回显新计数并抓取并显示它就足够了。通过向HTML添加类来识别使用的美妙之处在于,您可以在一次点击中更新页面上的所有值,而无需通过简单地添加类来了解它们的位置。
上面的例子使用JQuery;但这个概念适用于大多数高质量的脚本语言。
答案 1 :(得分:0)
在PHP中,如果您设置了一个cookie,但仍然在同一个会话中,则需要在$ _COOKIE数组中明确定义它,如下所示:
setcookie("TestCookie", "test");
$_COOKIE["TestCookie"] = "test";
是的,我学到了很多东西。
答案 2 :(得分:0)
您要做的是使用JavaScript更新标头。使cart_process.php
页面返回标题的新内容,或仅返回<div>
,<p>
的新内容或购物车内容所在的任何其他标记。然后,使用jQuery ,使用服务器返回的新HTML更新该元素的内容。
除了使用AJAX之外,没有其他方法可以刷新标头。如果以上内容不适合您的代码结构,您可以在将项目添加到购物车后再发送第二个AJAX请求到只返回header.php
内容的页面,并使用jQuery更新标题有了这个新内容。
答案 3 :(得分:0)
为什么不返回一个JSON对象,而不是只返回一个简单的true
值或者你的ajax处理PHP脚本中的任何值?该对象的一部分可以是购物车中现在的项目总数,无论您输出购物车数量,客户端脚本都可以将其插入到DOM中。
当你了解它时,购物车是最难实现的。这是结账/收费/库存之后的事情,这很复杂:
<?php
if ($_SERVER['REQUEST_METHOD'] = 'POST') {
$itemID = $_POST['itemID'];
$quantity = $_POST['quantity'];
$_SESSION['cart'][$itemID] = $quantity;
$status['error'] = false;
$status['items_in_cart'] = count($_SESSION['cart']);
return(json_encode($status));
}
客户端你的页面中有一个地方:
<div id="cart_item_count"></div>
并做
$('#cart_item_count').html(response['items_in_cart']);