重新启动或覆盖Ajax请求

时间:2014-11-03 10:16:51

标签: jquery ajax

我有两个函数autosubmit()manualsubmit()

function autosubmit() {
    $.post('action.php', $('#form').serialize(), function(data){
        $('#container').html(data);
    });
}

function manualsubmit() {
    autosubmit();
}

autosubmit()会在正文加载时调用,但有时需要load container manualsubmit()数据,然后点击再试按钮会触发abort()。我想中止之前发送给服务器的ajax请求。我无法实施{{1}}方法。

3 个答案:

答案 0 :(得分:2)

发送后,您无法取消ajax请求。您只能忽略JS中的返回值。

您可以使用.data取消显示返回的值:

function autosubmit(){
  $body = $("body");
  if($body.data('autosubmit') !== true){
    $.post('action.php', $('#form').serialize(), function(data){
      if($body.data('autosubmit') !== true) $('#container').html(data);
    });
  }
}

function manualsubmit(){
  $("body").data('autosubmit',true);
  $.post('action.php', $('#form').serialize(), function(data){
    $('#container').html(data);
  });
}

说明:调用manualsubmit()后,会使用jQuery的'autosubmit' => true.data添加到文档正文中。如果调用autosubmit(),或者返回了其ajax请求,则会在请求或显示数据之前确保缺少上述值。

答案 1 :(得分:1)

看看这个例子:

var currentRequest = null;
currentRequest = $.ajax({
    url: 'action.php', 
    type: 'post', 
    data: {your_fields_params},  
    beforeSend: function(){
        if( currentRequest != null )
            currentRequest.abort();
    }, 
    success: function(){
    }
});

答案 2 :(得分:1)

使用$.post并不排除使用abort。它返回一个与$.ajax相同的jqXHR对象,因此你可以调用它的abort方法,如下所示:

var previousRequest;

function autosubmit() {
    previousRequest = $.post('action.php', $('#form').serialize(), function(data){
        $('#container').html(data);
    });
}

function manualsubmit() {
    previousRequest && previousRequest.abort(); // abort the request, if there was one
    autosubmit();
}

请注意,这不会停止正在进行的AJAX请求(因为这是不可能的),只会执行该请求的返回处理程序。