2010-11-25 9 views
1

私は、呼び出され、jsonデータを返すajax関数を持っています。この機能は、たsetIntervalループを介して呼び出されます。setInterval関数から戻り値を取得

function SetMaxBidReload() { 
     var reloadInt = 6000; 
     var doReload = true; 

     //set some logic here 

     if (doReload) { 
      setInterval(function() { ReloadMaxBid(); }, reloadInt); 
     } 
    } 

    function ReloadMaxBid() { 
     var nextReload; 
     $.ajax({ 
      url: 'ajaxcall.aspx', 
      cache: false, 
      success: function (data) { 
       //change to dom elemants here based on return data 
       nextReload = data[0].NextReload; 
      } 
     }); 
     return nextReload; 

    } 

バックAJAX呼び出しから来るものに基づいたsetIntervalのreloadIntを変更するものイムやろうとしています。

a:それは可能であり、b:どうやってやるの?異なっ

+0

'ReloadMaxBid'は常に' undefined'を返します。おそらく 'success'ハンドラは' ReloadMaxBid'が戻る前に呼び出されないでしょう。 –

+0

確かに...私はそれについても考えていませんでした。これを克服するためのあなたの提案は何ですか? – AaronHS

答えて

2

setIntervalそれをコーディングすることによってこれを実現する方法についての提案を開い

イムはreloadIntは一切影響を与えないだろう変更、一度、その間隔に基づいて機能を実行し、タイムアウトのparamをとります。

あなたは成功コールバックでsetTimeoutを使用する必要があります。

function ReloadMaxBid() { 
    $.ajax({ 
     url: 'ajaxcall.aspx', 
     cache: false, 
     success: function (data) { 
      //change to dom elemants here based on return data 

      var next = data[0].NextReload; 
      if (next !== -1) { 
       setTimeout(function(){ReloadMaxBid();}, next); 
      } 
     } 
    }); 
} 

あなたはまた、物事を始めるために6000どこかの値でsetTimeoutを使用する必要があるだろう。

+0

以下の私の(間違った)答えで言いましたように、 'ReloadMaxBid'関数を' setTimeout'に直接渡して、無名関数で囲むことはできません。 – Zecc

+0

...または 'ReloadMaxBid'を一度呼び出すだけで起動します。 –

+0

@ Zeccはい、あなたはそれを行うことができます、それは匿名関数を使用して私の習慣です:D @Marcelはい確かに、おそらく彼は初期タイムアウトを持っていたい –

関連する問題