前端ajax请求 实现简单秒杀

Laravel 5.8 简单实现秒杀

三步流程
秒杀前

秒杀页面

//控制器
    public function index(){
        $data=模型层::get();
        return view('miaosha.index',['data'=>$data]);
    }
视图层
@foreach($data as $v)
<div style="float: left;margin-right: 30px">
    <div>
    <img src="{{$v->path}}" width="200" height="200" alt="">
        <div>距离秒杀结束时间:
            <span id="h{{$v->id}}"></span>时
            <span id="m{{$v->id}}"></span>分
            <span id="s{{$v->id}}"></span>秒
        </div>
        <div>
            <spqn>{{$v->name}}</spqn>
            <spqn>{{$v->price}}元</spqn>
        </div>
    </div>
    <div>
        <button class="btn" id="{{$v->id}}">抢购</button>
    </div>
</div>
@endforeach

mysql数据写入redis缓存中

//读取数据库数据存入redis中
    public function cun(){
        $data = MiaoSha::get();
        $redis = new \Redis();
        $redis->connect('127.0.0.1','6379');
        $redis->select(10);

        foreach ($data as $k => $v){
            for ($i=1;$i<=$v['stock'];$i++){
                $redis->lpush('goods'.$v['id'],$i);
            }
        }
    }

秒杀中
aiax请求倒计时

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
 $(document).ready(function () {
        window.setInterval(function () {
            $.ajax({
                url:'http://www.laravel.com/dao',
                type:'GET',
                dataType:'json',
                success:function (data) {
                    for (var i=0;i<data.length;i++){
                        id = data[i]['id'];
                        $('#h'+id).text(data[i]['hour']);
                        $('#m'+id).text(data[i]['minute']);
                        $('#s'+id).text(data[i]['second']);
                    }
                }
            })
        },1000)
    });

后台倒计时

  //倒计时
    public function daojishi(){
        $data=MiaoSha::get();
        foreach ($data as $k => $v){
            //开始时间
            $starttime = time();
            //结束时间
            $endtime = $v['endtime'];
            //剩余时间
            $remaintime = $endtime-$starttime;
            //开始时间和结束时间相差的秒数
            $hour = floor($remaintime/3600);//小时
            $minute = floor(($remaintime-$hour*3600)/60);//分钟
            $second = $remaintime-$hour*3600-$minute*60;//秒

            $data[$k]['hour'] = $hour;
            $data[$k]['minute'] = $minute;
            $data[$k]['second'] = $second;
        }
        return $data;
    }

ajax请求秒杀后减去redis缓存以及数据库库存量

  $('.btn').click(function () {
        var id = $(this).attr('id')
        $.ajax({
            url:"http://www.laravel.com/later",
            type:"get",
            dataType:"json",
            data:{'id':id},
            success:function (data) {
                if (data['code']==1){
                    alert(data['msg'])
                }else{
                    alert(data['msg'])
                }
            }

        })
    })

秒杀后

    //秒杀后
    public function hou(Request $request){
        $id = $request->get('id');
        $redis = new \Redis();
        $redis->connect('127.0.0.1','6379');
        $redis->select(10);
        $key = 'goods'.$id;

        if ($redis->lLen($key)>0){
            //删除redis
            $redis->lPop($key);
            //修改数据库库存量
            $sql = DB::update("update goods set stock=stock-1 where id=$id");
            //生成订单号
            $order_id = date('Ymd',time()).md5(rand(100,999));
            //生成时间
            $addtime = time();
            //添加入库
            $sql1 = DB::table('order')->insert(['order_id'=>$order_id,'goods_id'=>$id,'addtime'=>$addtime]);
            if ($sql){
                if ($sql1){
                    return ['code'=>1,'msg'=>'秒杀成功'];
                }
            }
        }else{
            return ['code'=>2,'id'=>$id,'msg'=>'秒杀结束!!!'];
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值