按钮里有ajax请求。 按钮按下60秒内disabled为true。 但是我在后台日记发现用户会多次请求ajax,不是同时请求而是,一个请求完后会再次请求。大概在2分钟内一直连续请求这个后台接口。这是怎么一回事?ajax 的返回状态是200

解决方案 »

  1.   

    1、先用async: false, 先修改为同步试试;
    2、var asyNo = 0;if(asyNo == 0){
    $.ajax({
        beforeSend: function(XMLHttpRequest){
            asyNo = 1;
        },
        success: function(data, textStatus){
            asyNo = 0;
        }
    });
      

  2.   


    这个没用他是 第一个ajax 走完php 返回后 再次响应ajax
      

  3.   

      
      function get_verification_code() {
         var mobile = $("input[name=mobile]").val();
         if(mobile=='' || mobile==null || mobile==undefined){
         alert('手机号不能为空!');
    return ;           
         }
         var isMobile=/^(?:13\d|14\d|15\d|17\d|18\d)\d{5}(\d{3}|\*{3})$/;
        if(!isMobile.test(mobile)){
         alert('手机号格式不对!');
    return ;
        };     
       //alert("验证码正在发送中,请您耐心等待!");
        $('#get_verfication').attr("disabled",true); 
    var countDownOb;
    var countDownTime=60;
    countDownOb=setInterval(function(){
      $("#get_verfication").val(countDownTime--);
      if(countDownTime<=0){
      $('#get_verfication').attr("disabled",false); 
      $("#get_verfication").val("获取验证码");
      countDownTime=60;
      clearTimeout(countDownOb);
      };
      },1000);
    var name = $('input[name=name]').val();  
        $.ajax({
    type:'post',
    url:"",
    data:{mobile:mobile,name:name},
    dataType:'text',
    success:function(result){
    if(result.search(/error/i)+1)
    {
    alert('发送出错:\n'+result);
    return ;   
    }

    }
    });  }
      

  4.   

    一开始 没限制会一直发短信直到被短信商拉黑
    后来在php限制时间
    第一次 我后端限制30秒内直接return  
    第二次我后端限制60秒内直接return  
    然后发现 都是会在2分钟内重复请求
    但是 我自己手机试是正常的 没有过重复请求 但是 我收到反馈 有些客户才会重复发送ajax请求 安卓和苹果都有
      

  5.   

    js 在4楼这个没问题,事件绑定呢?
    php? 上面有数据日记截图
      

  6.   

    会不会是因为你后台设置了60秒返回,js的button设置也是60秒重新获取加上ajax请求时间,然后就是后台还没返回验证码按钮已经是可点击状态了,用户又点击了一次获取,这样才符合你说的两分钟多次获取。
      

  7.   

    这个你最好不要用setInterval来做,
    1、当第一次点击时前后端都记录下当前时间。
    2、前端disabled btn不能点击,后台记录时间,防止用户刷新后点击callback。另外,你是怎么区分,有些客户才会重复发送ajax请求,是自动还是用户自己行为的呢?
      

  8.   


    我在ajax 加了async: false 先试几天看下有没有 重复响应的反馈
      

  9.   


    我在ajax 加了async: false 先试几天看下有没有 重复响应的反馈async: false 不一定有效,2,肯定有效,很多项目我都是这么写的。
      

  10.   

    不是  JS 是设置60秒一个显示的倒计时 和60秒内不能按 之前我js 设置60秒 php 设置30秒内查重 它也一样重复请求
     后台我是每次进入函数就写日记 查看重复 如果这个手机号请求离上次请求小于60才直接返回 不去发验证码 
      

  11.   


    谢谢建议 我的确没想到这点。
    不过现在 我在php 设置日记查重 发现小于60间隔直接返回错误 60秒内不能发送
      

  12.   

    重复发送说明function调用了多次,存在问题是按钮事件绑定了多次或者什么地方多次调用function.
      

  13.   

    整个页面就 一个按钮有 onclick="get_verification_code()"   本来是悬浮框形式的 我还特地改成新页面去显示绑定手机页面
      

  14.   


    我在ajax 加了async: false 先试几天看下有没有 重复响应的反馈async: false 不一定有效,2,肯定有效,很多项目我都是这么写的。好的 我用beforeSend 设置临界值了 让它变成临界区 只有一个ajax执行 试试看几天看反映
      

  15.   


    我也怀疑 因为 自己怎么试都不会出现重复情况 只有1线人员反馈 我查数据看发现那就果断用一个flag,,标记一下ajax的状态,默认flag为true,一旦进入方法就让flag为false,,,直到方法相应处理结束,再还原flag的状态。
      

  16.   


    我也怀疑 因为 自己怎么试都不会出现重复情况 只有1线人员反馈 我查数据看发现那就果断用一个flag,,标记一下ajax的状态,默认flag为true,一旦进入方法就让flag为false,,,直到方法相应处理结束,再还原flag的状态。
    所以就用 上面webyellow说的 用beforeSend 设置互斥