【问题标题】:Passing a param from javascript to controller将参数从 javascript 传递给控制器
【发布时间】:2012-10-15 21:23:14
【问题描述】:

我在视图中有以下 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 传递到控制器的方法,例如它只返回 created_at 高于当前显示的最后一个选项的选项。

我猜这条线没有做这项工作,所以对此有一点帮助会非常感谢:)

$("#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 的扩展帮助 :) 真的很高兴..

【问题讨论】:

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


    【解决方案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) {}
          });
    }
    

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

    【讨论】:

    • ":" 右侧的 after 是您的 after,第一个是您将作为参数发送给操作的对象的名称。
    • 你能把你的代码和我的代码结合起来吗,因为我不知道把你的代码放在我的代码中:) 谢谢!
    • 当然,你的代码什么时候执行?是在点击事件上吗?
    • 我正在使用 Pusher (websocket) 来触发事件。这触发得很好,但我似乎无法将 after 参数传递给控制器​​。
    • 我已经把它变成了一个函数,只要你想发送那个参数就试着把它放进去,它应该工作得很好。现在是:在字符串或对象之后?很抱歉,我现在一半在工作,一半在尝试提供帮助,5 点后我会有更多的时间在这里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多