Я попал на новую грязную базу кода без какого-либо тестирования, и я довольно долго борюсь с этой проблемой. Я не могу использовать любой код ES6, просто старый ванильный JS и jQuery.
Контекст: на веб-странице есть несколько пар входов, первый вход из пары вызывает firstFunction()
при размытии, а второй ввод secondFunction()
также при событии размытия. Как видно из примера кода ниже, каждая функция затем вызывает другую функцию, ajaxFunction()
, которая выполняет запрос AJAX.
Цель: я хочу иметь возможность вызывать ajaxFunction()
только в том случае, если не выполняется другой запрос AJAX от предыдущего вызова функции. Дело в том, что когда он запускается впервые на паре входов, в базе данных создается новая строка, и запрос возвращает идентификатор строки. Поэтому, когда он вызывается во второй раз, он будет ОБНОВЛЕНИЕ в базе данных вместо вставки из-за идентификатора. Если второй вызов из пары выполняется до того, как первый завершится, у меня останутся две отдельные строки в базе данных, что нежелательно.
Пример: если пользователь вводит какой-то текст в первый ввод, тоfirstFunction()
срабатывает при размытии, затем он быстро перемещается ко второму входу и вводит что-то, так что secondFunction()
запускается при размытии, но может случиться так, что AJAX-запрос от вызова firstFunction()
не былзавершено еще. Таким образом, вызов AJAX из secondFunction()
должен начинаться только в том случае, если был завершен вызов из firstFunction()
. Та же логика применима для случая, когда пользователь начинает вводить данные во втором вводе и вводе в первом.
Примечание: это не единственные запросы AJAX на странице, есть и несколько других.
Я провел какое-то исследование и чувствую, что $.when()
- это то, что мне нужно, но это меня беспокоит, когда дело доходит до его интеграции в эту логику. Я также думал о $.active
, но это не очень помогает.
function firstFunction() {
// Some logic goes here then we call the AJAX function.
ajaxFunction(1, 2, 3);
}
function secondFunction() {
// Some logic goes here then we call the AJAX function.
ajaxFunction(4, 5, 6);
}
function ajaxFunction(param1, param2, param3) {
$.ajax({
method: "POST",
url: "https://website.localhost",
data: {
param1: param1
param2: param2
param3: param3
}
}).done(function() {
console.log('Done!');
});
}