1

在一个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 并在成功回调中读取它,是否可能在成功回调中发生冲突?

以防万一,我该如何防止这种行为?

4

2 回答 2

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);  
            }
      });       
});
于 2013-07-19T11:14:20.213 回答
0

用于 object.abort()丢弃已被服务调用的数据我已添加代码以单击按钮以中止服务您可以根据您的情况尝试它:)

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

$(document).click(function() {lastRequest.abort() });
于 2013-07-19T11:15:19.140 回答