[英]Passing a param from javascript to controller
我在视图中有以下javascript:
<script type="text/javascript">
var pusher = new Pusher('<%= Pusher.key %>'); // Replace with your app key
var channel = pusher.subscribe('choices');
channel.bind('created', function(data) {
var after = $('.ticket:last').attr('data-time');
$("#tickets").append("<%=raw escape_javascript(render(@tickets, :after => " + after + ")) %>");
});
</script>
还有我的控制器中的以下内容:
@tickets = Choice.where("choices.created_at > ?", Time.at(params[:after].to_i + 1).utc)
我正在寻找一种将after参数从javascript传递到控制器的方法,因此它只返回Choices,其中created_at高于当前显示的最后一个Choice。
我猜测这条线不能胜任工作,因此对此有所帮助:)
$("#tickets").append("<%=raw escape_javascript(render(@tickets, :after => " + after + ")) %>");
编辑:
我现在有以下内容,这似乎可以解决将after变量传递给控制器的问题。.我检查了Firebug,可以看到响应约束了最新BET上的数据。.但是视图仍然是错误的。 它没有将最新的下注添加到DIV中,而是将过去的所有下注显示两次,而根本没有新的下注。 任何人? :)
查看文件:
<script type="text/javascript">
var pusher = new Pusher('<%= Pusher.key %>'); // Replace with your app key
var channel = pusher.subscribe('choices');
channel.bind('created', function(data) {
var after = $('.ticket:last').attr('data-time');
var settings = { after: after}
$.ajax({
url: '/Home/Index',
type: 'POST',
dataType: 'json',
data: settings,
cache: true,
success: function (data) {
$("#tickets").append("<%=raw escape_javascript(render(@tickets)) %>");
}
});
}
);
</script>
路线:
post 'Home/Index' => 'home#index'
控制器(索引动作):
@tickets = Choice.betable(current_user).where("choices.created_at > ?", Time.at(params[:after].to_i + 1).utc)
respond_to do |format|
format.json { render :json => @tickets }
format.html
end
解:
经过大量的试验和错误,我最终使用了一种解决方案,该解决方案是在控制器中而不是视图中的javescript代码中呈现HTML。 这样,我就可以访问所需的参数。
respond_to do |format|
format.html
format.json do
@html = render_to_string( :partial => '/choices/choice.html.erb', :locals => { :choice => @tickets} )
render :json => { :success => true, :html => @html }
end
end
感谢Chazt3n的扩展帮助:)真的很喜欢。
我相信您可以通过AJAX发送
Function sendAfter((string?) after){
var settings = { after: after}
$.ajax({
url: '/Controller/Action',
type: 'POST',
dataType: 'json',
data: settings,
cache: true,
success: function (data) {}
});
}
这将把您的数据至少传递给控制器。只需调用该函数,然后将其发送给您想要的参数即可
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.