У меня есть запрос POST
, который извлекает данные с сервера в соответствии с параметрами, которые настраиваются пользователем с помощью number inputs
. Простого прослушивания события change
недостаточно, потому что я хочу, чтобы данные обновляли sh при использовании колесика мыши для изменения входного значения.
Вызов моей функции refre sh с чем-то подобным явно не оптимально:
$('input').on('mousewheel', function(){
refresh_data();
});
Было бы много запросов, и поскольку они асинхронные, я никогда не могу точно знать, будет ли последний запрос, который будет выполнен, последним, который я отправлю.
В настоящее время я использую setInterval
для просмотра объекта, содержащего интервалы (округленные временные метки), для которых был запрошен refre sh. Внутри слушателя mousewheel
я добавляю следующий интервал к объекту, как свойство / ключ, чтобы избежать дублирования.
Примерно так:
var i = 100;
var obj = [];
$('input').on('mousewheel', function(){
// add next interval to obj;
obj[Math.ceil(Date.now()/i)*i] = true;
});
var check = setInterval(function(){
// refresh if current interval is in obj
var t = Math.floor(Date.now()/i)*i;
if(obj[t]){
delete obj[t]; // remove from obj
refresh_data();
}
}, i);
Я тестировал этот код на своей машине с i=50
, и объект всегда пуст, что нам и нужно, но с i=30
, как только я go слишком быстро с колесом, я вижу некоторые старые интервалы, накапливающиеся в объекте. Это вызвано тем, что setInterval
пропускает удары, поэтому, какое бы значение я не выбрал для i
, некоторые пользователи с меньшим количеством процессоров могут " пропустить неправильный удар ", и в конечном итоге он завершит движение своего колеса мыши, увидев результат, который не соответствует значению параметров.
Я чувствую, что, возможно, я делаю это более сложным, чем это должно быть, поэтому я спрашиваю:
Что бы лучший способ получить данные с сервера на колесо, учитывая:
1: я хочу постоянно refre sh данные как пользователя колесо над полем ввода.
2: я хочу быть 100% уверен, что представленные данные после движение колеса всегда точное .