【问题标题】:Is there a way to just refresh a PHP include file without refreshing the entire page?有没有办法只刷新 PHP 包含文件而不刷新整个页面?
【发布时间】:2011-01-10 01:52:05
【问题描述】:

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

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

$_COOKIE['cart'];

其中存储了添加产品的 mysql 记录 ID 以及连字符分隔符,如下所示:

11-36-33-

要显示购物车中的商品数量,我只需计算 cookie 中连字符的数量:

substr_count($_COOKIE['cart'], '-');

我在名为 header.php 的头文件中回显它,并在购物车页面中“包含”。

现在的问题是,当用户将商品添加到购物车时,cart_process.php 文件会提示消息“商品添加成功”,但从 header.php 显示的购物车中的商品数量仍未更新。

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

所以我的问题是,有没有办法只刷新页面上的一个包含文件而不刷新页面本身。在这种情况下,产品页面上的 header.php?

【问题讨论】:

    标签: php ajax


    【解决方案1】:

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

    <span class='total_cart_quantity'>$value</span>
    

    然后在JS中的Ajax回调

    $(".total_cart_quantity").html(new_quantity)
    

    大多数情况下,我倾向于从我的 Ajax 例程返回 JSON,其中包含需要更新的元素列表,但只需从 PHP 中回显新计数并抓取并显示它就足够了。通过向 HTML 添加类来识别使用的美妙之处在于,您可以一次更新页面上的所有值,而无需通过简单地添加类来知道它们的位置。

    上面的例子使用了JQuery;但这个概念适用于大多数高质量的脚本语言。

    【讨论】:

      【解决方案2】:

      在 PHP 中,如果你设置了一个 cookie,但你仍然在同一个会话中,你需要像这样在 $_COOKIE 数组中显式定义它:

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

      是的,我很难学到这一点。

      【讨论】:

      • 嗯,这很容易解释。除了 $GLOBALS 之外,所有超全局变量都是在脚本启动时创建/填充的,然后再也不会被 PHP 触及。无论如何,您没有回答用户的问题。他想在不刷新整个内容的情况下更新页面的其他部分。
      • 我误解了这个问题,对不起。
      【解决方案3】:

      您要做的是使用 JavaScript 更新标头。使cart_process.php 页面返回标题的新内容,或者仅返回&lt;div&gt;&lt;p&gt; 或购物车内容所在的任何其他标签的新内容。然后,使用jQuery 更新该内容带有服务器返回的新 HTML 的元素。

      除了使用 AJAX 之外,没有其他方法可以刷新标题。如果上述内容不能轻松融入您的代码结构,您可以在将商品添加到购物车后向仅返回 header.php 内容的页面发出第二个 AJAX 请求,并使用 jQuery 来更新标题新内容。

      【讨论】:

        【解决方案4】:

        不只是返回一个简单的true 值或从您的ajax 处理PHP 脚本中返回什么,为什么不返回一个JSON 对象呢?该对象的一部分可以是现在购物车中的商品总数,您的客户端脚本可以将其插入到 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']);
        

        【讨论】:

          猜你喜欢
          • 2014-01-10
          • 2014-02-06
          • 2014-03-23
          • 1970-01-01
          • 2011-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多