0

如何在rails 3.2中通过ajax更新多个部分在这里我做了我的ajax请求

$.ajax({
    url: "/home/create_entry",
    type: "POST",
    data: params,
    cache: false,
    success: function(data) {
        $('#'+did).html(data);
        //   $("#results").html('<%#=j render(:partial => 'explorer', :locals => {:entries => @entries, :entry_count=> @entry_count}) %>');
    }
});

在控制器中写入

def create_entry
 if request.xhr?  
  @entry = Entry.new
  @entry.title = params[:title]
   respond_to do |format|
            if @entry.save
              flash[:notice] = "Entry created successfully"
              @entry = Entry.last
              @entries = Entry.where(:user_id => current_user.id).order(sort_column + ' ' + sort_direction)
              @entry_count = @entries.count
              format.js
            end
          end
    end

在 create_entry.js.erb

<%= render :partial =>  'edit_entry_form', :locals => {:entry => @entry}%>
<%= render :partial =>  'explorer', :locals => {:entries => @entries}%>

现在我可以获取这两个数据,我如何在 ajax 请求成功后更新这两个部分?

提前致谢。

4

2 回答 2

0

您应该考虑使用 jQuery 将这两个部分的内容动态插入到您要更新的页面区域中。就像是:

$("#divforedit_entry_form").html("<%= escape_javascript(render 'edit_entry_form' :locals => {:entry => @entry})%>");

$("#divforexplorer").html("<%= escape_javascript(render 'explorer' :locals => {:entries => @entries})%>");
于 2013-01-05T16:50:21.040 回答
0

首先,我们需要更正您的 AJAX 调用,因为我们不需要将服务器响应添加到仅评估的页面上(在 Rails 中默认情况下会发生这种情况)。

Javascript

$.ajax({
  url: "/home/create_entry",
  type: "POST",
  data: params,
  cache: false
});

现在我们更新控制器以执行逻辑并获取正确渲染部分所需的任何数据。

控制器

def create_entry
  if request.xhr?  
    # Create entry
    respond_to do |format|
      if @entry.save
        # Collect any data needed for view
        format.js
      end
    end
  end
end

现在在视图中,我们使用 jQuery 和 Rails javascript 帮助器将部分替换/插入到 HTML 文档中。

查看 (create_entry.js.erb)

$("#edit_entry_form").replaceWith("<%= j(render('edit_entry_form', :entry => @entry)) %>");
$("#explorer").replaceWith("<%= j(render('explorer', :entries => @entries)) %>");

以上假设 HTML ID#edit_entry_form#explorer存在。

于 2013-01-08T19:02:04.243 回答