递归AJAX调用被取消

时间:2018-11-21 10:00:33

标签: php jquery ajax

我有一个页面,其中显示了日志文件,我希望这些日志文件使用户能够选择和删除。删除是通过AJAX请求完成的,其中通过参数发送每个删除日志的ID。

问题是在某些情况下有数百个日志,在这种情况下,AJAX请求似乎失败了。我想是因为通过参数发送的数据太多了。我尝试将AJAX请求分解为多个部分,但仅发送第一个请求,然后所有其他请求在Chorme中显示为“已取消”。以下是我的代码:

var logFiles = [];

function deleteLogBatch() {
  if (logFiles.length == 0) 
    return false;
    
  if (logFiles.length > 10) 
    var elements = 10;
  else 
    var elements = logFiles.length;

  var params = 'action=deletelog';

  for (var i = 0; i < elements; i++) {
    params += '&lf' + i + '=' + escape(logFiles.shift());
  }

  $.ajax({
    type: "POST",
    url: './ajax/logs.php',
    data: params,
    success: function(response) {
      checkResponse(response);
      deleteLogBatch();
    }
  });
}

$('body').on('click', '#confirm-log-delete', function(event) {
  event.preventDefault();

  $('.select-log').each(function() {
    if ($(this).is(":checked")) {
      logFiles.push($(this).attr('id'));
    }
  });

  deleteLogBatch();
}

对于为什么会发生这种情况以及执行此操作的正确方法的任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

您应该使用异步ajax调用

$.ajax({
type: "POST",
url: './ajax/logs.php',
async: true,
data: params,
success: function(response) {
  checkResponse(response);
  deleteLogBatch();
}

});

它不会等待上一个ajax调用