2

アイテムのリストと、アイテムの詳細を表示するサイドバーがあります。サイドバーは部分的なものであり、リストのアイテムでイベントonmouseenterがトリガーされたときにAjaxで変更する必要があります。

(マウスを入力したアイテムの)IDをAjaxを介してコントローラーのアクション「リスト」に送信できましたが、部分的に更新されていません... :(

私は解決策に非常に近いと確信しています。私はAjaxを初めて使用し、StackOverflowや他の多くのWebサイトで午後中ずっと検索しましたが、AjaxでCRUDアクションを管理する方法を常に説明しており、うまくいかないようです...

コードは次のとおりです。

-ajax部分:

$("div.item").mouseenter(function(event){
 var id = $(this).attr('data');
    var url = "/item/list?id="+id+"&lg=en";
    var data = $(this).serialize();
    $.post(url,function(response_data){$("#item_details").html(response_data)});
    return false;
});

-コントローラーのアクション:

def list
    @items = Item.all
    if request.xhr?
        id_exists?("item", params[:id], "item", "list"){@item = Item.find(params[:id])}

        render :partial => "item/sidebar/sidebar_home", :object => @item
    else
        @item = @items.first unless @items.empty?
    end
end

-haml:

content_for :sidebar do
   #item_details
       =render :partial => "item/sidebar/sidebar_home", :object => @item


.items_wrapper
-if @items.empty?
    ="No items"
-else
    = render :partial => "item/partials/item", :collection => @items

2番目のパーシャルの中には、すべてをラップするdiv.itemがあります。基本的に、サイドバーの内容を更新したいのですが、それだけです。

質問がばかげているように思われる場合は申し訳ありませんが、事前にご協力いただきありがとうございます。

Wizard of Ogzに感謝します!XD

4

1 に答える 1

2

AJAX 要求からの応答を処理するには、コールバック関数を渡す必要があります。http://api.jquery.com/jQuery.post/を参照してください。

例は次のようになります。

$.post(url, data, function(response_data){ $("#sidebar_id").replaceWith(response_data) });
于 2012-04-09T21:14:38.957 に答える