Я давно такой вариант использую.
Функция принимает 3 аргумента (Объект, Событие, Экшен)
<form onsubmit="postQuery($(this), event, 'login'); return false;" action="/auth" method="POST">
<input type="tel" name="phone" placeholder="password" autocomplete="off" required="">
<button class="btn-primary">Войти</button>
</form>
requestSent = false; // флаг что бы нельзя было отправить повторный запрос на сервер.
function postQuery(form, event, action){
var
url = form.attr('action'),
data = form.serialize();
if(!requestSent) {
requestSent = true;
$.ajax({
type: "POST",
async: true,
url: url,
cache: false,
data: data+'&action='+action,
success: function(data){
// что-то делаем
},
complete: function() {
//requestSent = false;
// что-то делаем после завершения AJAX запроса
}
});
}
}