我在我的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,但我没有设法替换显示的没有任何刷新。
答案 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