2017-03-18 3 views
0

を経由してレールでビューをレンダリングします私はこれが私application.jsでコードをJS持っAJAXおよびコントローラ

$(document).ready(function(){ 
     var kraken_btc_eur_old = 0; 

     setInterval(function(){ 

      $.get('https://api.kraken.com/0/public/Ticker?pair=XXBTZEUR', function(data){ 

       var kraken_btc_eur = data.result.XXBTZEUR.c[0]; 
       kraken_btc_eur_old = kraken_btc_eur; 
       $(".kraken_btc_eur").text(kraken_btc_eur); 

      }); 

      $.ajax({ 
       type: "POST", 
       url: "/bets", 
       data: { parameter: kraken_btc_eur_old }, 
       success: function (data) { 

       }   
      }); 

     }, 10000); 

    }); 

これまでのところ、新しい値はAPIや場所からフェッチページの表示ごとに10秒、とても良いですページの更新を行わずにHTMLの対応するクラスに渡します。 私の問題はAJAXリクエストにあります。私は10秒毎にポスト要求は私のコントローラで作成したアクションを押すと、コードがそれに応じて実行されることをレールコンソールでそれを見ることができます:私は新しいとHTMLビューを更新するために管理していないが

def create 
    @bet = Bet.new 
    @bet.base_price = params["parameter"] 
    @bet.save 
    Bet.first.destroy 

    @bets = Bet.all 
    @bet_last = Bet.last 

    #render :js => "window.location = '#{root_path}'" 
    #redirect_to "index" 
    #render :inline => "<% @bets.each do |b| %><p><%= b.id %><p><% end %>" 

    end 

ページを更新する必要はありません。新しいベット(AJAX)が10秒ごとに作成されるたびに、リフレッシュせずに自動的にページに表示されるようにします。 私は作成アクションでさまざまな方法でレンダリングしようとしましたが、ブラウザのコンソールにressources - > XHRという更新されたhtmが作成されていますが、リフレッシュせずに表示されたhtmで置き換えることはできません。

答えて

1

AJAXリクエストを送信しているとき、レールはあなたのビューを更新することができません。あなたが言ったように、あなたは実際にページをリフレッシュしていないからです。したがって、レールは新しいHTMLコンテンツをブラウザに送信することはできません。

この場合、新しいBetをフロントエンド(Javascript)に追加するロジックを処理する必要があります。

$.ajax({ 
    type: "POST", 
    url: "/bets", 
    data: { parameter: kraken_btc_eur_old }, 
    success: function (data) { 
    var newBet = "<div>" + data.base_price + "</div>"; 
    $('list_of_bets').append(newBet); 
    } 
}); 

とレール側に、あなたはあなただけのJSONとして作成された新しいBet返却する必要があります:

何かのように

def create 
    # your logic here 
    render json: @bet 
end 
+0

デュードを、あなたは考えているどのくらいの時間助かりました。私は2日間非常に多くの異なるコードを試してきました。本当にありがとう! – Antoine

関連する問題