Opóźnij połączenia wielofunkcyjne za pomocą etykiet
Z tym rozwiązaniem współpracuję. Opóźni to wykonanie dowolnej funkcji . Może to być zapytanie wyszukiwania klucza, może szybkie kliknięcie poprzednich lub następnych przycisków (które w przeciwnym razie wysyłałyby wiele żądań, jeśli byłyby szybko klikane w sposób ciągły, i mimo wszystko nie byłyby używane). Korzysta z obiektu globalnego, który przechowuje każdy czas wykonania i porównuje go z najnowszym żądaniem.
W rezultacie wywoływane jest tylko to ostatnie kliknięcie / akcja, ponieważ żądania te są przechowywane w kolejce, że po X milisekundach jest wywoływane, jeśli w kolejce nie istnieje żadne inne żądanie o tej samej etykiecie!
function delay_method(label,callback,time){
if(typeof window.delayed_methods=="undefined"){window.delayed_methods={};}
delayed_methods[label]=Date.now();
var t=delayed_methods[label];
setTimeout(function(){ if(delayed_methods[label]!=t){return;}else{ delayed_methods[label]=""; callback();}}, time||500);
}
Możesz ustawić własny czas opóźnienia (opcjonalny, domyślnie 500ms). I wyślij argumenty funkcji w sposób „zamykający”.
Na przykład, jeśli chcesz wywołać funkcję poniżej:
function send_ajax(id){console.log(id);}
Aby zapobiec wielu żądaniom send_ajax, opóźnij je, używając:
delay_method( "check date", function(){ send_ajax(2); } ,600);
Każde żądanie, które używa etykiety „data sprawdzenia”, zostanie uruchomione tylko wtedy, gdy nie zostanie wysłane żadne inne żądanie w okresie 600 milisekund. Ten argument jest opcjonalny
Niezależność od etykiet (wywoływanie tej samej funkcji docelowej), ale uruchamianie obu:
delay_method("check date parallel", function(){send_ajax(2);});
delay_method("check date", function(){send_ajax(2);});
Powoduje wywołanie tej samej funkcji, ale opóźnia je niezależnie, ponieważ ich etykiety są różne