Jquery在每个浏览器选项卡上产生相同的效果

时间:2014-03-06 13:12:26

标签: php jquery ajax

这个问题似乎很奇怪..但无论如何,这里是...... 我正在创建一个购物车网站,我有一个添加到购物车按钮。单击该按钮,产品将添加到购物车,同时检查库存中特定产品的总量是否已降至0。如果它不是0,那么仍然显示添加到购物车按钮,如果它是0则显示“缺货”而不是按钮..

此功能已使用jquery和ajax以及后端作为php完成。

到目前为止一切顺利。但是我做了一件让它看起来很怪异的东西。我打开了同一页面的两个浏览器标签,其中添加到购物车按钮是。

当我点击标签中的按钮时,添加到购物车按钮被“缺货”替换..但是另一个标签仍然有按钮那里..所以虽然产品的数量是0,我可以仍然将产品从另一个选项卡添加到购物车,这使得当前数量为负1.这绝对不是我想要的东西..而且我不想在我的jquery代码中使用set_time_limit函数来运行相同的再次发挥作用......

那我该怎么办?我希望我能很好地解释这个问题,但我不需要用一些代码来表明这一点。但无论如何。我会放一些..

从另一页获取购物车按钮..

$(document).ready(function(){
$(function(){
                var prid = <?php echo $product_id; ?>; 
                var cat = '<?php echo $cat; ?>'; /*category*/

                var up = {
                action: 'get_cart_div',
                prid:prid,
                cat:cat
                };

                $.ajax({
                type: "get",
                url: "assets/get_cart_div_single_product.php",
                data: up,
                cache: false,
                success: function(r){

                $('.cartdiv').html(r);
                    },
                });

                });
            });

检查可用性..它在同一页面上并再次运行上一个功能

function check_cartdiv(prid,cat){


                var up = {
                action: 'get_cart_div',
                prid:prid,
                cat:cat
                };

                $.ajax({
                type: "get",
                url: "assets/get_cart_div_single_product.php",
                data: up,
                cache: false,
                success: function(r){

                $('.cartdiv').html(r);
                    },
                });

                };

<div class="cartdiv"></div>

get_cart_div_single_product.php

$action = isset($_GET['action']);
if($action == 'get_cart_div'){
    $product_id = $_GET['prid'];
    $cat = $_GET['cat'];

 /*checking the quantity from inventory table by quering*/
/*add to cart functionality is here..*/

if($quantity < 1){
echo 'out of stock';
}else{
echo '<div onclick="add_cart_u('.$product_id.'); check_cartdiv('.$product_id.',\''.$cat.'\');">Buy Now</div>';
}
}

2 个答案:

答案 0 :(得分:2)

此问题不能仅在您所描述的两个选项卡方案中发生。这也可以 如果我打开一个标签,并且5分钟内没有做任何事情就会发生。与其他城市的其他用户同时购买该商品! 然后,如果我尝试购买,它将再次显示-1。

有两种方法可以解决这个问题:

  1. 通过向您的网站添加一些轮询来实时查看您的广告资源。每隔30秒间隔一次ajax请求。

  2. 在事件发生时更新您的数据。当用户按“添加到购物车”时,不要直接进行添加到购物车操作。而是显示“更新库存....”消息,检查当前状态,如果已更改,请相应地采取措施。例如“对不起,此商品现已缺货”。

答案 1 :(得分:0)

另一种方法是:

Scenario 1: ( If only 1 item left )

任何用户选择该特定项目后锁定该项目。假设提供用户可以购买该产品的超时。超时后释放锁定。

Scenario 2: ( More than 1 stock )

任何用户选择该项目后锁定该项目并将库存数量减少1.