我遇到这样一个问题,程序是bs的,用的是Jquery结合.net做的。为了是页面内容都是无刷新,现在遇到这样一个问题,有A,B,C 3个按钮  点击这3个按钮都会刷新D。每个按钮都要执行一定的操作,数据量大可能需要1-3秒。如果用户ABC快速的来回点,是很快速的那种(不等待前面的请求是否走完就切换的那种很快)。这个时候有时间页面就死掉,或者等待很久,队列消息都执行完了才会最后一次点击的结果。
    请问:如何点击ABC按钮的时候只执行最新的请求,就是说js里面删除旧请求,不管他们是否执行玩,只执行新的请求。

解决方案 »

  1.   

    用版本控制每次发出请求时记录一个自增id,存在内存中,并跟ajax绑定。返回响应时,先判断ajax绑定的id,是否小于内存中的记录id,是则放弃,否则继续执行
      

  2.   

    $.ajax.abort(),不知道有没有autoAbort之类的参数设置,楼主自查
      

  3.   

    模拟一个消息队列  思路:    1、用一个数组,存储按钮的触发事件。例如:A按钮点击  Message.push(A); 以此类推    2、用setInterval(function(){
              if(Message.length>0){
                   var action= Message.pop();
              }     },0)    如有更好的办法 请各位指教
      

  4.   

    网上给你找了个,自己试试看
    current_request = $.get('/events', { '七夕': '发春' },function(resp) { alert(resp); });
    if(current_request) {current_request.abort();} 
      

  5.   

    setInterval的间隔时间不能是0...
      

  6.   

    我记得ajax有个中断的方法的,点击下个按钮的时候将前面的ajax中断
      

  7.   

    我怎么觉得点A之后把其他按钮灰掉比较好,响应回来之后再enable
      

  8.   

    jQuery.Deferred(), introduced in version 1.5, is a chainable utility object that can register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.
      

  9.   

    有什么办法可以中断异步请求 在执行新的异步请求,abort旧的新的 都杀死了