繁体   English   中英

将参数从JavaScript传递到控制器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM