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

有没有办法只刷新PHP包含文件而不刷新整个页面?,php,ajax,Php,Ajax,我有一个带有链接“addtocart”的产品页面,单击该页面时,它会通过jquery向一个名为Cart_process.php的页面发送一个ajax请求,并将该项目添加到购物车中 购物车通过名为购物车的cookie工作: $_COOKIE['cart']; 它存储添加产品的mysql记录ID以及一个连字符分隔符,如下所示: 11-36-33- 要显示购物车中的项目数,我只需计算cookie中的连字符数: substr_count($_COOKIE['cart'], '-'); 我在头文件h

我有一个带有链接“addtocart”的产品页面,单击该页面时,它会通过jquery向一个名为Cart_process.php的页面发送一个ajax请求,并将该项目添加到购物车中

购物车通过名为购物车的cookie工作:

$_COOKIE['cart'];
它存储添加产品的mysql记录ID以及一个连字符分隔符,如下所示:

11-36-33-
要显示购物车中的项目数,我只需计算cookie中的连字符数:

substr_count($_COOKIE['cart'], '-');
我在头文件header.php中对此进行了回应,该头文件名为header.php,包含在购物车页面中

现在的问题是,当用户将项目添加到购物车时,cart_process.php文件会发出一条消息“item added successfully”,但购物车中从header.php显示的项目数仍未更新

这是因为header.php文件没有刷新,我看到如何使其刷新的唯一方法是刷新整个产品页面。但是,这破坏了ajax的魅力


所以我的问题是,有没有一种方法可以只刷新页面上的一个include文件而不刷新页面本身。在本例中,产品页面上的header.php

在PHP中,如果设置了cookie,但仍处于同一会话中,则需要在$\u cookie数组中显式定义它,如下所示:

setcookie("TestCookie", "test");
$_COOKIE["TestCookie"] = "test";

是的,我通过艰苦的学习了解到了这一点。

您需要做的是使用JavaScript更新标题。使
cart\u进程.php
页面返回标题的新内容,或仅返回
或购物车内容所在的任何其他标记的新内容。然后,使用jQuery,使用服务器返回的新HTML更新该元素的内容


除了使用AJAX,没有其他方法可以刷新标题。如果上面的内容不适合您的代码结构,那么您可以在将项目添加到购物车后,在返回
header.php
内容的页面上发出第二个AJAX请求,并使用jQuery用新内容更新标题。

直接修改DOM;我倾向于使用元素类来识别它们,这样我就可以

<span class='total_cart_quantity'>$value</span>
大多数情况下,我倾向于从Ajax例程返回JSON,其中包含需要更新的元素列表,但只需从PHP回显新的计数就足够了。通过向HTML中添加类来识别用户的美妙之处在于,您可以在一次点击中更新页面上的所有值,而无需通过简单地添加类来知道它们在哪里


上面的例子使用JQuery;但是这个概念在大多数高质量的脚本语言中都可以使用。

为什么不从ajax处理PHP脚本中返回一个简单的
true
值或任何东西呢?该对象的一部分可以是购物车中现在的项目总数,客户端脚本可以在输出购物车计数的任何位置将其插入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));
}

这很容易解释。除了$GLOBALS之外,所有的超全局变量都是在脚本启动时创建/填充的,然后PHP再也不会触及它们。在任何情况下,您都没有回答用户的问题。他想在不刷新整个内容的情况下更新页面的其他部分。对不起,我误解了这个问题。
<?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']);