我试图创建一个累积奖金投注网站(就像挑战一样)。我的控制器中有一个方法,当用户向底池添加钱时更新底池。我在主页上显示底池总数,并希望一旦有人向底池添加钱,就用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,所以任何帮助都会受到赞赏。谢谢!
答案 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