zoukankan      html  css  js  c++  java
  • 防止重复发送Ajax请求问题

    在工作中有很多场景需要通过Ajax请求发送数据,像是注册、登录、提交用户反馈等。用户在点击了“确认”按钮之后有可能一段时间内没有收到反馈页面无任何反应,然后就接着连续多次点击“确认”按钮导致发送n个重复的请求,给服务器造成不小压力。

    从前端解决重复发送请求的方法是有的。

    1、点击“确定”之后禁用该按钮

      <input type="button"  id="submit-btn">
            <script>
        var btn=$("#submit-btn");
        btn.onclick=function(){
            btn.attr('disabled',true)
        }
    </script>
    

      


    2、使用变量进行上锁


    思路如下:声明变量lock,当lock值为true,禁止再次发送请求,当lock值为false,可以发送请求。在Ajax返回success或者error的回调函数中将lock置为false,也就是说只有当服务器给出响应之后才可以再次发送请求。

     var lock=false; //
        $('#msg').click(function(){
            if(lock) return;
            lock=true;
            setTimeout(function(){
                $.ajax({
                    url:'https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=wise_web',
                    type:'get',
                    data:{
                        'wd':'c'
                    },
                    jsonp:'cb',
                    jsonpCallback:'jshow',
                    dataType : 'jsonp',
                    success:function(res){
                        lock=false;
                        console.log(res)
                    },
                    error:function(){
                        lock=false;
                    }
                })
            });
        });
    

      


    3、设置时间,在规定时间内不允许再次发送请求

    和方法二类似,不同点在于决定是否可以再次发送求情的条件是是否超过规定时间(3s、5s或其他时间)。

    在最开始,声明变量lock=false。点击“确定”按钮,触发请求并将lock置为true。在规定时间之后(以3s为例)将lock置为false,此时就可以再次发送请求了。

    var lock=false;
    $btn.on('click',function(){
        if(lock){
            return;
        }
        lock=true;
        setTimeOut(function(){
            lock=false;
        },3000) // 3s后将lock设置为false, lock为false时就可以再次发送请求了。。。。。。
        $.ajax({
            type:'post',
            url:'/getdata/info/item.php',
            dataType:'json',
            data:'data',
            success:function(){
                ....... //xxx操作
            },
            error:function(){
                ...... // xxx操作
            }
        })
    

      


    当然,具体问题具体分析。结合实际问题适当调整思路才能找到更好的解决方法。

    转载:https://blog.csdn.net/jianglittlebai/article/details/79090194

  • 相关阅读:
    给js function的参数设置默认值
    如何让windows服务器IIS支持.apk/.ipa文件下载
    Firefox 设置技巧
    在sql中使用了 hashbytes 函数
    SQL Server 查询处理中的各个阶段(SQL执行顺序)
    Jquery 操作 radio选中值
    gradle更新依赖库
    weex第一节-环境搭建
    安装weex-toolkit老是失败的解决办法
    Android透明度颜色值计算
  • 原文地址:https://www.cnblogs.com/liubingyjui/p/10833470.html
Copyright © 2011-2022 走看看