2

レコードの並べ替えに使用しているインデックス ページにフォームがあります。フォームに Ajax 機能を追加したかったのですが、何らかの理由で、Ajax をミックスに追加するとすぐにフォーム パラメータが送信されません。

これが私のフォームです:

<div id="sort-options">
    <%= form_tag uploads_path, :method => "get", :remote => true do %>          
            <%= select_tag "sort", options_for_select([["Creation Date", "created_at"], ["File Name", "name"], ["Rating", "rating_average"], ["Downloads", "downloads"]]) %>
            <%= select_tag "direction", options_for_select([["Descending", "desc"], ["Ascending", "asc"]]) %>                   
            <%= submit_tag "Sort" %>
    <% end %>   
</div>

そして私のAjax JavaScript:

jQuery(document).ready(function($) 
{ 
    $(function () {  
        $('#sort-options input, .pagination a').live("click", function () {  
            $.get(this.href, null, null, 'script');  
            return false;  
        });  
    });

});

送信ボタンをクリックし、Firebug コンソールで何が起こっているかを確認すると、Ajax の呼び出しに成功し、問題なくページを提供していることは明らかです。ただし、送信された私のパラメーターは完全に無視され、データベースを再クエリするときにそれが考慮されません。':remote => true' を取り出して Ajax ファイルへのリンクを削除すると、params は正常に index アクションに送り返されます - ただ Ajax はありません :(

Ajax は現在、まったく同じページにあるページネーションで機能していることを付け加えておきます。

4

1 に答える 1

3

問題は、Railsの組み込みAJAX機能()をオーバーライドする別のクリックハンドラーを送信ボタンにバインドすることです:remote => true。セレクター#sort-options input, .pagination aは、ページ付けリンクだけでなく、フォームの送信ボタンとも一致します。$.get()ボタンには、URLとして渡すものであるhref属性がありません。したがって$.get(this.href, ...)、null URL(GETパラメータなしで、空の文字列、つまり現在のURLであるかのように機能します)に対してAJAXGETリクエストを作成しようとします。

于 2012-07-18T18:36:18.480 に答える