2013-10-01 16 views
11

ある間隔内でAJAX呼び出しに関する質問があります。それがなぜ機能しないのか、それとも動作するのか。jQuery AJAX with a interval

私はこのコード(この1つは動作しません)

setInterval($.ajax({ 
    //Place code here 
}), 2000); 

を持っているが、その後、私はそれがこのよう

setInterval(function() { 
    $.ajax({ 
    //Do ajax stuff here 
    }); 
}, 2000); 

は、今では動作しますが、私は作るように私にはこれが見えるように余分な無名関数。

+2

各間隔で実行される機能を提供する必要があります。 '$ .ajax'は関数を返さないので、動作しません。 –

+0

大きな質問@ロブ!うまくいけば私の編集はマークダウンの正しい使い方を理解する助けになるだろう:)投稿と一緒に遊ぶ専用のサンドボックスである[meta post](http://meta.stackexchange.com/questions/3122/formatting-sandbox)があるこれはおそらく、あなたがマークダウンに慣れるのにも役立ちます。 – Lix

+2

@Lix編集のおかげで:) –

答えて

11

setIntervalには、文字列形式の関数または実行可能コードが必要です。

最初の呼び出しは、文字列内に置くと機能します。

setInterval('$.ajax({ //Place code here })', 2000); 

evalと同じ理由で、この構文を使用することはお勧めしません。

setIntervalでもオプションのパラメータリストを使用できます。あなたはこの事実を利用して、このようなものを使用することができ :これはthisの値がwindowにバインドされるように、コンテキストを決定するためにthisを使用して、オブジェクトのメソッドのために動作しないだろうと

setInterval($.ajax/*a reference to the ajax function*/, 
2000, {url: 'someurl', success: onSuccess, error: onError}/*args passed to $.ajax*/ 
); 

は注意を。それは次のように動作しません、次のとおりです。

setTimeout($('h1').css, 1000, {'color': 'red'}); 
+1

'eval'を使わないようにコードサンプルを変更してもよろしいですか?免責条項をつけても大丈夫です。 – Halcyon

+0

@FritsvanCampen、but bro、それは私のポストの唯一のコード例です。 –

+0

ありがとうございました:) –

3

setIntervalは、最初の引数(Reference)としての機能を必要としsetInterval($.ajax({ //Place code here }), 2000);が動作しない理由$.ajax機能がjQuery XMLHttpRequest object(Reference)

setInterval(function() { $.ajax({ //Do ajax stuff here }); }, 2000);確かに無名関数を作成し返すので、それは、ですコードを引用してstringにする必要がある場合を除き、必要です。

+0

お返事ありがとうございます:) –