簡體   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