有没有办法只刷新PHP包含文件而不刷新整个页面?

时间:2011-01-10 01:52:05

标签: php ajax

我有一个带有“添加到购物车”链接的产品页面,当点击它时,它会通过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?

4 个答案:

答案 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']);