2016-11-28 10 views
1

setInterval内のget_data()関数を使用してデータを正常に取得できました。しかし、AJAX関数が新しい価格を見つけたら、get_data()関数を呼び出すと新しい価格は返されませんが、最初の反復で与えられた価格が引き続き返されます(2つのコンソールログ行で説明します)AJAXコールバックの間隔を使用して、変数が更新されない

インターバル内にget_data()を呼び出すと、価格が正しく更新されましたか?

// Collect price data into array 
var interval = 1000; 
var arr = []; 

function price() { 
    setInterval(function() { 
     get_data(function(result) { 
      arr.push(result); 
      console.log('updated price: ' + arr[0]); // not updated correctly 
     }); 
    }, 1000); 

    function get_data(callback) { 
     $.ajax({ 
      url: 'http://' + domain + '/site-options/', 
      dataType: 'json', 
      cache: fase, 
      success: function(data) { 
       var price = data['gbp_price']; 
       var abs_change = data['gbp_abs_change']; 
       var p_change = data['gbp_change']; 
       var market_cap = data['gbp_market_cap']; 
       var today_max = data['gbp_today_max']; 
       var today_min = data['gbp_today_min']; 

       var obj = { 
        'price'  : price, 
        'abs_change' : abs_change, 
        'p_change' : p_change, 
        'market_cap' : market_cap, 
        'max'  : today_max, 
        'min'  : today_min 
       }; 

       console.log('price: ' + price); // updated correctly 

       if (callback) 
        callback(obj); 
      } 
     }); 
    } 
} 
price(); 
+4

セット 'キャッシュ:AJAX要求でfalse'をINGのとちょうど実行 - あなたは)(.pushを避けることができるいずれかのように、あなたは最初の値を毎回ログインしています。また、AJAXのポーリングは非常に悪いパターンです。あなたは効果的に自分のサーバーをDDoSする。低い間隔でデータを同期させたい場合は、代わりにWebSocketを参照してください。 –

+0

ありがとう、キャッシュ:falseは悲しいことにトリックを行いません。 @RoryMcCrossan私はそれが何であるかを知りたがっています。私はそれが役に立ったら何かをする前にデータが変更されたかどうかをテストするつもりです。 – Nick

+1

うーん、 'arr.push(結果);は何を知っていますか?配列の最後に項目を追加します。そして、あなたは 'arr [0]'で最初のインデックスを読んでいます。もちろん、新しい項目を最後に追加してから最初のインデックスは更新されません。 – epascarello

答えて

3

データを配列スタックにプッシュすると、最後まで終了します。

console.log(result.price); 

か::

console.log('updated price: ' + (arr.length - 1)); 
関連する問題