2017-12-03 24 views
1

サーブレットにリクエストするJavaScriptがあります。要求は機能しますが、1秒の指定された時間間隔でそれを繰り返すことはできません。私は間違って何をしていますか?JavaScriptで "SetInterval"で予期しない動作が発生する

私はフロントエンドの開発とJavaScriptにとってかなり新しいです。

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

[setIntervalコールバックの重複の可能性は1回のみ実行](https://stackoverflow.com/questions/10182714/setinterval-callback-only-runs-once) – Xufox

答えて

1

の下に、このブロックの内側に入れて、あなたがやりたい何か、:

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

はこれで、今それを試してみてください。

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

with the argumentssetInterval(callbackFunction, timingInMilliseconds)に動作しますsetInterval

$.getに電話をかけているのは、直接callbackFunction引数です。これは残念ながら、$.getへの呼び出しの結果が引数として渡され、関数自体は渡されないため、うまくいきません。関数を渡したとしても、適切な引数で呼び出されることはありません。

代わりに無名関数の呼び出しでそれを包むかそこらのように、機能に置き:

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

または:

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

あなたはsetIntervalで直接$.getを使用して主張している場合、あなたは可能性

setInterval(function(a,b,c){ 

     console.log(a + b +c); 

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

ほとんどのブラウザではあなたが呼び出しでsetIntervalを使用することができます上記の電子リンク):

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

任意のblurイベントにあなたは間隔の新しいインスタンスを作成し、それらがメモリに残っていると、競合が発生グローバルな間隔Refオブジェクトを作成し、に設定した間隔を参照することができます新しい間隔を開始する前に古い間隔を廃棄します。

関連する問題