Gon变量在Ajax请求期间没有从rails控制器传递给js

时间:2017-10-18 17:02:05

标签: javascript jquery ruby-on-rails ruby ajax

我试图创建一个累积奖金投注网站(就像挑战一样)。我的控制器中有一个方法,当用户向底池添加钱时更新底池。我在主页上显示底池总数,并希望一旦有人向底池添加钱,就用Ajax更新它。我正在使用gon gem将变量(例如我的控制器中的总计)传递给我的javascript。它在重新加载页面时有效,但在使用ajax调用更新方法时不起作用。

继承我的PagesController:

def home
  @jackpot = Jackpot.last
  gon.pot = @jackpot.pot
end

JackpotsController:

def update
  @jackpot = Jackpot.find(params[:id])
  if params.has_key?(:amount)
    @jackpot.update(pot: @jackpot.pot + params[:amount].to_f)
    gon.pot = @jackpot.pot
  end
  respond_to do |format| 
    format.js
  end
end

Javascript :(在网址中:id目前是硬编码的)

$("#bet-btn").click(function() {
   $.ajax({
        type: "POST",
        url: "/jackpot/update/21",
        datatype: "json",
        success: function() {
          console.log("Pot size: " + gon.pot);
          updatePot();
        },
        error: function() {
          console.log("error")
        }
    });

});

这会更新锅的甜甜圈进度条

function updatePot() {
  updateDonutChart('#jackpot-donut', gon.pot , true); 
}

下注按钮:(金额也是硬编码)

 <%= link_to "Place Bet", update_pot_path(@jackpot, :amount => 
 0.1), method: :post,:remote => true, id: "bet-btn", class: "btn btn-info btn-lg" %>

我对rails很新,尤其是javascript / ajax,所以任何帮助都会受到赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

在控制器中,只需响应JSON:

PyYAML==3.12
requests==2.18.4

使用respond_to do |format| format.json { render json: { pot: @jackpot.pot } } end 过帐时指定dataType。请注意,新数据已传递给成功函数,因此它不是$.ajax,而是gon.pot

data.pot