Как контролировать количество ajax запросов?
Можно использовать debounce или throttle:function debounce(f, ms) {

  let timer = null;

  return function (...args) {
    const onComplete = () => {
      f.apply(this, args);
      timer = null;
    }

    if (timer) {
      clearTimeout(timer);
    }

    timer = setTimeout(onComplete, ms);
  };
}function throttle(func, ms) {

  var isThrottled = false,
    savedArgs,
    savedThis;

  function wrapper() {

    if (isThrottled) { // (2)
      savedArgs = arguments;
      savedThis = this;
      return;
    }

    func.apply(this, arguments); // (1)

    isThrottled = true;

    setTimeout(function() {
      isThrottled = false; // (3)
      if (savedArgs) {
        wrapper.apply(savedThis, savedArgs);
        savedArgs = savedThis = null;
      }
    }, ms);
  }

  return wrapper;
}
Код вашего хандлера при использовании debounce будет такой:function handler() {
  // do something
}

var debouncedHandler = debounce(handler, 500);

document.querySelecror('.submit').addEventListener('click', debouncedHandler);
С throttle аналогично.
Реализации debounce и throttle есть в lodash. Если используете эту библиотеку можно взять оттуда.
-параметры фильтра отсылать при клике на 1 кнокупку - подобрать да и впринципе может ответ от сервера задержаться
так всегда будут задержки, разница в том видите ли вы их или нет
можно еще блочить форму, пока ответ не пришел
можно какой то спиннер какой на кнопку вывести до отправки запроса, а после успешного ответа его перезаписать числом