通过AJAX和控制器在rails中渲染视图

时间:2017-03-18 20:34:29

标签: javascript ruby-on-rails ajax

我在我的application.js中有这个JS代码:

  $(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);

    });

到目前为止,每隔10秒,页面会显示API中的新值,并将其放入HTML中的相应类,而不会刷新任何页面。 我的问题是AJAX请求。我可以看到在rails控制台中,post请求每10秒点击一次我的控制器中的create动作,并且相应地执行代码:

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

但是我无法使用新值更新html视图而无需刷新页面。因为每10秒创建一次新赌注(AJAX),我希望它们自动出现在页面中而无需进行任何刷新。 我尝试在我的创建操作中以不同的方式呈现,我意识到在我的浏览器控制台下创建的文档在ressources下 - &gt; XHR与更新的htm,但我没有设法替换显示的没有任何刷新。

1 个答案:

答案 0 :(得分:1)

当您发送AJAX请求时,rails将无法更新您的视图。那是因为,正如你所说,你实际上并没有刷新页面。因此rails无法将新的HTML内容发送到浏览器。

在这种情况下,您需要处理在前端(Javascript)中添加新Bet的逻辑。

类似的东西:

$.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);
  }
});

在rails方面,您需要将刚刚创建的新Bet作为JSON返回:

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