2017-12-03 4 views
1

Ich habe ein JavaScript, das eine Anfrage an ein Servlet stellt. Die Anfrage funktioniert, aber ich kann sie nicht im angegebenen Zeitintervall von 1 Sekunde wiederholen. Was mache ich falsch?Unerwartete Verhalten mit "SetInterval" in JavaScript

Ich bin ziemlich neu in Front-End-Entwicklung und JavaScript.

$(document).ready(function() { 
     $('#userName').blur(function(event) { 
       var name = $('#userName').val(); 
       setInterval($.get('JqueryServlet', { 
         userName : name 
       }, function(responseText) { 
         $('#ajaxResponse').text(responseText);}), 1000); 
     }); 
}); 
+2

Mögliches Duplikat von [setInterval Callback läuft nur einmal] (https://stackoverflow.com/questions/10182714/setinterval-callback-only-runs-once) – Xufox

Antwort

1

Alles, was Sie tun wollen, setzen innen unterhalb dieses Blocks:

setInterval(function(){ 
    alert("I will be called in 3 second and again after 3 seconds"); 
}, 3000); 

Probieren Sie es jetzt mit diesem:

$(document).ready(function() { 
    $('#userName').blur(function(event) { 
      var name = $('#userName').val(); 
      setInterval(function(){ 
       $.get('JqueryServlet', { 
        userName : name 
       }, function(responseText) { 
        $('#ajaxResponse').text(responseText); 
       }); 
      }, 1000); 
    }); 
}); 
2

setInterval arbeitet with the argumentssetInterval(callbackFunction, timingInMilliseconds).

Es sieht so aus, als ob Sie Ihren Anruf auf $.get direkt im callbackFunction Argument setzen. Dies funktioniert leider nicht, da Ihr Aufruf an $.get als Argument übergeben wird, nicht die Funktion selbst. Selbst wenn Sie die Funktion übergeben haben, wird sie nicht mit den richtigen Argumenten aufgerufen.

Statt es in einem anonymen Funktionsaufruf wickeln oder es in einer Funktion setzen, etwa so:

function getServlet() { 
    // code 
} 
setInterval(getServlet, 1000); // to go off every 1 second 

Oder:

setInterval(function() { 
    // code 
}, 1000); 

Wenn Sie sich mit $.get direkt in setInterval darauf bestanden, könnten Sie Verwenden Sie etwas wie:

setInterval(function(a,b,c){ 

     console.log(a + b +c); 

    }, 500, "a", "b", "c"); 

In den meisten Browsern (siehe th e Link oben) Sie setInterval mit dem Aufruf verwenden:

setInteval(callbackFunction, timingInMilliSeconds, callbackArg, callbackArg, ...); 
1

auf jedem Event blur Sie neue Instanz Intervall erstellen und sie bleiben in Erinnerung und Konflikte verursachen können, schaffen ein globales Intervall ref Objekt und stellen Intervall Bezug auf es und vor dem neuen Intervall beginnen, das alte Intervall zu verwerfen.