将一个参数从javascript传递给控制器

时间:2012-10-15 21:23:15

标签: javascript jquery ruby-on-rails controller params

我在视图中有以下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)

我正在寻找一种方法将之后的参数从javascript传递给控制器​​,它只返回created_at高于当前显示的最后一个选择的选项。

我猜这条线路没有完成这项工作,所以对此有一点帮助非常有用:)

$("#tickets").append("<%=raw escape_javascript(render(@tickets, :after => " + after + ")) %>");

修改

我现在有以下内容,它似乎修复了变量传递给控制器​​..我检查了Firebug并且可以看到响应在最新的BET上反对数据..但是观点仍然是错误的。而不是将最新的Bet添加到DIV,它显示所有过去的BETS两次,而没有新的。任何人? :)

查看文件:

<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

解决方案:

经过大量的试验和错误后,我最终使用了一个解决方案,我在控制器中渲染HTML而不是在视图中的javescript代码中。通过这种方式,我可以访问我需要的参数。

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提供的扩展帮助:)真的很赞赏它..

1 个答案:

答案 0 :(得分:1)

我相信你可以通过AJAX发送它

Function sendAfter((string?) after){
 var settings = { after: after}
 $.ajax({
        url: '/Controller/Action',
        type: 'POST',
        dataType: 'json',
        data: settings,
        cache: true,
        success: function (data) {}
      });
}

这将至少将您的数据传递给控制器 只需调用该函数并将其参数发送到任何您想要的地方