[ajax] - wysyłaniu zapytania po sprawdzeniu czy ktos pisze

0

Witam,
Posiadam skrypt, który za każdym razem gdy sie zmieni litere w formularzu to wysyła zapytanie do serwera.
Chciałbym, aby zapytanie było wysłane na przykład wtedy kiedy po jakims czasie wartosc formularza sie niezmienia dopiero wysyłał juz zapytanie kompletne.

Prościej?
Chce wysłac do serwera słowo: "Komputer"
Jak bede pisał: K....o....m..... to za kazdym razem gdy wartosc formularza sie zmienii (zdarzenie onKeyUp) wysyła mi zapytanie odpowiednio: K, Ko, Kom....

Chciałbym by zapytanie było wysłane dopiero wtedy jak na przykład od 0,3s wartość formularza nie ulegnie zmianie. Czyli wpisze Komputer i z chwila nacisniecia litery r, po upłynięciu 0,3s niech wysyła zapytanie.

Mam nadzieje, ze chociaż troche jest to zrozumiałem.
Jak to zrobić?

</image>
0

Możesz użyć Mootools, która dodaje do funkcji metodę delay powodującą wykonanie takiej funkcji z opóźnieniem.
Np.:

input = $("twoj_input_albo_textarea");

input.addEvent("keyup", function() {
    opoznienie = 300; // w milisekundach
    (function(){
        wyslij_zapytanie_ajax(input.value);
    }).delay(opoznienie);

});
0

Troche nierozumiem kodu. Czy nie ma on gdzieś błędu z (), albo {}?

A czy funkcja SetTimeout też będzie dobra?

Tak sobie pomyślałem, że wszelkie delay-e i settimeout tylko opóźniają czas dostarczenia zapytań, a po na przykład 300 milisekundach wszystkie dotrą i to ze zdwojoną siłą :).

function export_form_value(input) {
if (input.length >= 2)
{
setTimeOut ("x_przeslij_zapytanie_ajax(input, output)", 300)
}

<input type="text" onkeyup= "export_form_value(document.getElementById('input').value);" id="input" >

Akurat mniejwięcej tak to u mnie wygląda w moim skrypcie, ale wlasnie nie jestem pewien juz co do tych delay-ów.

0

moze taki przyklad Ci pomoze, sprawdz jak dziala:

<script>
  function exportFormValue(elm) {
    var str = elm.value;
    if (elm.tmId) clearTimeout(elm.tmId);
    elm.tmId = setTimeout(function() {
      alert('A tutaj wysylanie tekstu: ' + str);
    }, 1000);
  }
</script>
<input type="text" onkeyup="exportFormValue(this)" />
0

Rozwiązanie chyba było by bardzo dobre (pare poprawek). Problem w tym, ze moja funkcja nie działa z setTimeout.

Korzystam z SAJAX-a i kod:

setTimeout("x_search_cpu(input, generate_dynamic_table)", 300)

Nie wykonuje sie.
Dla objaśnienia: x_search_cpu w pierwszym argumencie przekazuje dane z formularza do skryptu PHP, a drugi argument to nazwa funkcji w JS do której zostaną zwrocone wyniki z PHP.

0

a próbowałeś tak?

setTimeout(function() {
  x_search_cpu(input, generate_dynamic_table);
}, 300);
0

Bezparametrowe wywołanie funkcji export:

<input type="text" onkeyup= "export_form_value()" id="cpuinput">

Funkcja odpowiedzialna za wzięcie z pola cpuinput wartości i gdy ta jest większa/równa 2 to wyświetla informacje o wczytywaniu danych, sprawdza czy zmienna timerId istnieje, jezeli tak to kasuje z niej licznik. Następnie ustawia licznik na 1s dla funkcji send_values (), która wysyła wszystkie dane i wyswietla okienko Wysłano. Po liczbie ile wyskoczyło okienek można poznać ile razy zostało wysłane zapytanie do serwera. Nadal wyskakuje co litere po sekundzie nowe niestety.

function export_form_value () {
input = document.getElementById('cpuinput').value;
if (input.length >=2)
{
generate_loading_info ()
if (timerId) {clearTimeout(timerId);}
var timerId = setTimeout ("send_values ()", 1000)
}
else
reset_dynamic_table ()
}  

function send_values (){
x_search_cpu(input, generate_dynamic_table);
alert ("Wysłano !");
}

0

timerId nie może być zmienną lokalną (w moim przykładzie było ustawione jako właściwość elementu input z drzewa dokumentu) Ty odwołujesz się tak naprawdę do globalnego window.timerId wiec tam gdzie przypisujesz wartość do timerId usuń słowo kluczowe var i powinno być dobrze (chociaż to (łącznie z window.input) jest, jak dla mnie, mało eleganckie)

0

Teraz działa znakomicie, niestety musiałem pisać window.timerId :)
W każdym razie wielkie dzięki, bardzo miło że pomagasz takim delikw. jak ja.
Big plus dla Ciebie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1