во время ajax запроса блокировать остальные
Если пользователь жмет на поле (которое отслеживается на клик) 10 раз, то ajax запрос начинает выполняться и еще 9 таких же становятся в очередь и поочередно выполняются. как сделать чтобы эта очередь не создавалась во время выполнения первого?
Везде говорят менять css на дизейбл,но css во время запроса не меняется вообще никакое
var orderBy;
var sortBy;
$(document).on('click', "[sort]", function(){
// event.stopPropagation();
$('*').css("background-color: rgb(0, 0, 0)");
var poisk = document.getElementById('searchGost').value;
var page = document.getElementById('curPage').name;
orderBy = $(this).attr("id");
if ($(this).attr("sort") === 'ASC'){
sortBy = 'DESC';
}
else sortBy = 'ASC';
$(this).attr("sort", sortBy);
$.ajax({
async: false,
type: "POST",
url: "script/search.ajax.php",
data: {poisk: poisk,page: page,orderBy: orderBy, sortBy: sortBy},
success: function (result) {
$("#searchGostResult").html(result);
},
complete: function () {
$("#"+orderBy).attr("sort", sortBy);
}
});
});
Ответы (2 шт):
Автор решения: doox911
→ Ссылка
// Получаем ссылку на лемент
const input = document.querySelector('.my-input');
// Выполняется ли запрос
let isAjax = false;
// Добавляем выполнение функции по клику на элементе
input.addEventListener('click', clickOnInput);
// Эмулируем Ajax зфпрос
function ajaxRequestEmulation(time = 3000) {
// Устанавливаем флаг выполнения запроса
isAjax = true;
setTimeout(() => {
// Как получим ответ от сервера (выполнится запрос)
// И скажем, что мы готовы выполнить ещё запросы
isAjax = false;
}, time);
}
function clickOnInput(event) {
// Если сейчас нет запроса..
if (!isAjax) {
console.log('Send a request..');
ajaxRequestEmulation();
} else {
console.log('Sorry, but now I am fulfilling the request.');
}
}
<input type="text" class="my-input">
Автор решения: Vadim
→ Ссылка
Вот:
let tf = false; // выполняется сейчас
const clickInput=()=>{
if(tf === true)return false; // если выполняется, кыш
tf = true; // меняешь на "выполняется"
let r = $.ajax({
url: `https://google.com/`,
type: 'GET',
async: true,
success: (r)=>{
tf = false; // меняешь взад
return r;
},
error: (e)=>{
console.log(e.status, e.responseText);
tf = false; // меняешь взад (на ошибке)
return false;
}
});
};
___ (Сначала только на тайтл посмотрел и написал below)
Заблокировать на время нельзя, заблокировать "навсегда" можно(таким промышляют блокираторы рекламы), но скоро тоже будет нельзя
Но, ты можешь попробовать сделать запрос с async: false
let r = $.ajax({
url: `https://google.com/`,
type: 'GET',
async: false,
success: (r)=>{
return r;
},
error: (e)=>{
console.log(e.status, e.responseText);
return false;
}
});
console.log(r);