Ajax调用和JQuery:停止以前的ajax调用

时间:2013-07-19 11:08:00

标签: ajax jquery

在jsp页面中,当用户单击按钮时,会触发ajax调用。 如果用户一次又一次地点击按钮,我只会认为最后一次ajax调用是有效的,只考虑其响应。

我用:

  var lastRequest=null;
  $('#button').click(function() {           
  if (lastRequest) {
    lastRequest.abort();
    lastRequest = null;
  }

  lastRequest = $.ajax({
        type: "POST",
        url: "MyAction.do",
            success: function (response) {
                  response= $('<div/>').append(response);  
            }
      });       
  });

使用Firebug,我看到一些请求被中止,但不是全部。 我认为如果触发ajax调用,则无法忽略响应,是吗?

修改

如果我在MyAction.do中设置了一个var并且我在成功回调中读取了它,那么成功回调是否可能存在冲突?

如果我怎么能阻止这种行为?

2 个答案:

答案 0 :(得分:0)

我在中止ajax调用方面的经验是,它可以在工作时非常随机。

我使用过一次或两次的解决方法是计数器:

var lastRequest=null;
var started = 0, finished = 0;
$('#button').click(function() {           

  ++started;
  lastRequest = $.ajax({
        type: "POST",
        url: "MyAction.do",
            success: function (response) {
                  //Only do stuff on the last active request
                  if(++finished == started)
                    response= $('<div/>').append(response);  
            }
      });       
});

答案 1 :(得分:0)

使用object.abort()来丢弃服务调用的数据 我添加了代码,点击按钮中止服务,你可以根据你的情况尝试:)

  lastRequest = $.ajax({
        type: "POST",
        url: "MyAction.do",
            success: function (response) {
                  response= $('<div/>').append(response);  
            }
      });       
  });

$(document).click(function() {lastRequest.abort() });