Javascript Ajax请求期间,Gon变量未从rails控制器传递到js
我正在尝试创建一个彩票投注网站(作为一个挑战)。我的控制器中有一个方法,当用户向罐中添加钱时,更新罐。我在主页上显示pot总数,并希望在有人向pot中添加资金后立即使用Ajax进行更新。我使用gon gem将变量(比如pot total)从控制器传递到javascript。当页面被重新加载时,它工作,但当使用ajax调用update方法时,它不工作 这是我的页面控制器:Javascript Ajax请求期间,Gon变量未从rails控制器传递到js,javascript,jquery,ruby-on-rails,ruby,ajax,Javascript,Jquery,Ruby On Rails,Ruby,Ajax,我正在尝试创建一个彩票投注网站(作为一个挑战)。我的控制器中有一个方法,当用户向罐中添加钱时,更新罐。我在主页上显示pot总数,并希望在有人向pot中添加资金后立即使用Ajax进行更新。我使用gon gem将变量(比如pot total)从控制器传递到javascript。当页面被重新加载时,它工作,但当使用ajax调用update方法时,它不工作 这是我的页面控制器: def home @jackpot = Jackpot.last gon.pot = @jackpot.pot end
def home
@jackpot = Jackpot.last
gon.pot = @jackpot.pot
end
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
JackpotsController:
def home
@jackpot = Jackpot.last
gon.pot = @jackpot.pot
end
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:(在url中:id现在是硬编码的)
}))
这将更新锅的甜甜圈进度条
function updatePot() {
updateDonutChart('#jackpot-donut', gon.pot , true);
}
下注按钮:(金额也硬编码)
0.1),方法::post,:remote=>true,id:“bet btn”,类:“btn btn info btn lg”%>
我对rails非常陌生,尤其是javascript/ajax,所以如果有任何帮助,我将不胜感激。谢谢 在控制器中,只需响应JSON:
respond_to do |format|
format.json { render json: { pot: @jackpot.pot } }
end
使用$.ajax
过帐时指定数据类型。请注意,新数据正在传递给success函数,因此它不是gon.pot
,而是data.pot
$.ajax({
dataType: "json",
url: url,
data: data,
success: function(data) {
console.log('pot', data.pot);
}
});
does
console.log(“Pot大小:+gon.Pot”)代码>通过显示更新后的pot值是否按预期运行?另外,在开发者控制台中是否有任何错误?@abax否,它显示旧的gon.pot(当前但未更新)。刷新页面并再次提交ajax请求时,将显示新值。这(我想)是因为gon.pot设置在页面#home action中。也许可以尝试使用gon.watch
,您与gon的关系如何?您可以简单地返回JSON和更新的数量,并在您的$.ajax
@Leito的成功回调中读取它。尝试它,因为没有其他东西对我有效。如何将JSON返回到ajax回调?谢谢你的帮助!考虑返回整个“头奖”(或者它与页面相关的所有),并使用更健壮的东西来构建JSON对象:JBuilder、活动模型序列化器等。