Javascript 通过AJAX和控制器在rails中渲染视图
我的application.JS中有以下JS代码:Javascript 通过AJAX和控制器在rails中渲染视图,javascript,ruby-on-rails,ajax,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_
$(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秒会创建一次新的赌注,所以我希望它们自动出现在页面中,而无需进行任何刷新。
我在创建操作中尝试了不同的渲染方式,我意识到在我的浏览器控制台中的ressources->XHR下创建了带有更新htm的文档,但我无法在没有任何刷新的情况下将其替换为显示的文档。当您发送AJAX请求时,rails将无法更新您的视图。那是因为,正如你所说,你实际上并没有刷新页面。因此rails无法将新的HTML内容发送到浏览器 在这种情况下,您需要处理在前端Javascript中添加新赌注的逻辑 比如:
$.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);
}
});
伙计,你不知道你帮我节省了多少时间。我已经尝试了两天这么多不同的代码。非常感谢!
def create
# your logic here
render json: @bet
end