避免数据二次提交的处理方式

简介:

有时候,提交数据,会出现重复提交的问题。

可以通过一个标记锁死,等待执行完了,再解锁。

这个标记是全局的。

        var flag = false; // 全局变量
        // 藏宝
        function gotoBuriedTreasure() {
            // 藏起来
            var amount = parseInt($("#buried-treasure-value").val());

            if (typeof amount != 'number' || amount < 1000 || amount%40 != 0) {
                // 藏宝值
                toast('藏宝数量必须大于1000,并且是40的倍数');
                return;
            }

            var user = $api.getStorage('user');
            showNumberModel(function(actionPwd){
                    if (flag) {
                        return;
                    }
                    flag = true; // 避免二次提交

                    // 藏宝
                    api.ajax({
                        url: BASE_REQUEST_URL + '/Customer/TreasureInvest',
                        method: 'post',
                        data: {
                            values: {
                                customerId: user.customer_id,
                                actionPwd:actionPwd,
                                amount:amount
                            }
                        }
                    }, function(json, err) {
                        if (json && json.result) {

                            var auitoast = new auiToast();

                            if (amount>=1000 && amount < 10000) { // 绿色箱子
                                auitoast.success({
                                    title:"恭喜藏宝成功,获得40个绿色藏宝图。",
                                    duration:2000
                                });
                            }

                            if (amount>=10000 && amount < 100000) { // 蓝色箱子
                                auitoast.success({
                                    title:"恭喜藏宝成功,获得40个蓝色藏宝图。",
                                    duration:2000
                                });
                            }

                            if (amount>=100000 && amount < 500000) { // 橙色箱子
                                auitoast.success({
                                    title:"恭喜藏宝成功,获得40个橙色藏宝图。",
                                    duration:2000
                                });
                            }

                            if (amount >= 500000) { // 紫色箱子
                                auitoast.success({
                                    title:"恭喜藏宝成功,获得40个紫色藏宝图。",
                                    duration:2000
                                });
                            }

                            buriedTreasureDialogHide();
                            api.sendEvent({
                                name: 'game_data_reload',
                                extra: {
                                    msg: '数据刷新'
                                }
                            });
                        } else {
                            flag = false; // 失败可以二次提交
                            toast(json.msg);
                        }
                    });
                });

        }

这是一种思路,其他的语言可以一样使用。


本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6283362.html如需转载请自行联系原作者

相关文章
|
9月前
|
NoSQL Java 数据库
java接口防重提交如何处理
举一个最简单的例子:日常开发中crud在业务系统中普遍存在,在服务端没有做任何处理,客户端没有做节流、防抖等限流操作时,同一秒一个用户点了两次新增按钮,导致数据库中存在同样两条数据,其结果可想而知,同理修改、删除同样的道理;查询本身具有幂等性,但是在同一秒钟同样的操作,查询多次和一次,有区别吗?区别大了去了,不谈用户体验如何,光是网络开销、流量占用、带给服务器的压力等等,生产中一点小的问题,如何不及时处理,可能会引发灾难性bug。
|
11月前
|
分布式数据库 数据库
复制延迟案例(1)-最终一致性
该案例违反因果律。 想象先生和夫人之间的对话: Mr Mrs,你能看到多远未来? Mrs 通常约10s,Mr.
68 0
|
消息中间件 数据库 RocketMQ
失败补偿机制测试|学习笔记
快速学习失败补偿机制测试
84 0
失败补偿机制测试|学习笔记
|
容器
任务的批量提交invokeAll两种方法的区别
任务的批量提交invokeAll两种方法的区别
202 0
|
设计模式 缓存 自然语言处理
|
编解码 自然语言处理 监控
|
存储 测试技术 开发工具
BSTestRunner增加历史执行记录展示和重试功能
之前对于用例的失败重试,和用例的历史测试记录存储展示做了很多的描述呢,但是都是基于各个项目呢,不方便使用,为了更好的使用,我们对这里进行抽离,抽离出来一个单独的模块,集成到BSTestRunner中,以后我们使用BSTestRunner直接就可以使用里面的失败重试和展示历史记录了。
BSTestRunner增加历史执行记录展示和重试功能
|
移动开发
记录解决二次编码问题
记录解决二次编码问题
|
JSON Java API
【优雅代码】10-拒绝if/else数据校验及转换
避免if、else,只用注解完成校验及格式化
【优雅代码】10-拒绝if/else数据校验及转换