这个问题似乎很奇怪..但无论如何,这里是...... 我正在创建一个购物车网站,我有一个添加到购物车按钮。单击该按钮,产品将添加到购物车,同时检查库存中特定产品的总量是否已降至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>';
}
}
答案 0 :(得分:2)
此问题不能仅在您所描述的两个选项卡方案中发生。这也可以 如果我打开一个标签,并且5分钟内没有做任何事情就会发生。与其他城市的其他用户同时购买该商品! 然后,如果我尝试购买,它将再次显示-1。
有两种方法可以解决这个问题:
通过向您的网站添加一些轮询来实时查看您的广告资源。每隔30秒间隔一次ajax请求。
在事件发生时更新您的数据。当用户按“添加到购物车”时,不要直接进行添加到购物车操作。而是显示“更新库存....”消息,检查当前状态,如果已更改,请相应地采取措施。例如“对不起,此商品现已缺货”。
答案 1 :(得分:0)
另一种方法是:
Scenario 1: ( If only 1 item left )
任何用户选择该特定项目后锁定该项目。假设提供用户可以购买该产品的超时。超时后释放锁定。
Scenario 2: ( More than 1 stock )
任何用户选择该项目后锁定该项目并将库存数量减少1.