2012-08-04 86 views
0

当我调用$ .getJSON时,我想重新加载tbody元素。换句话说,我需要删除所有元素,并通过Json响应放置新元素。在Rails中使用带有Json响应的AJAX重新加载部分视图

JS

$(document).ready(function(){ 
    $('#position').sortable({ 
    update: function(event, ui) { 
     var newOrder = $(this).sortable('toArray').toString(); 
     $.getJSON('/save_positions.json', {ids:newOrder}, function(data){ 
      ?????? 
     }); 
    } 
    }); 
}); 

我查看

# index.html.erb 

<tbody id="position"> 
    <%= render :partial => "activities"%> 
</tbody> 

管窥

#_activities.html.erb 

<% @activities.each do |activity| %> 
    <tr id='<%= activity.id %>'> 
    <td><%= activity.position %></td> 
    <td><%= link_to activity.id, activity_path(activity) %></td> 
    <td><%= activity.name %></td> 
    <td><%= activity.estimated %></td> 
    <td><%= activity.used %></td> 
    <td><%=l activity.created_at %></td> 
    </tr> 

我的动作(应用控制器)

def save_positions 
    @activities = Activity.all(:order => 'position') 

    respond_to do |format| 
    format.json { render :json => @activities } 
    end 
end 
+1

你要在服务器上生成新的HTML,返回,并将其插入到文档中,还是要回到JSON和工艺,在JavaScript来生成新的HTML? – JMM 2012-08-04 14:39:06

+0

无论..我只想重新加载表没有重新加载页面 – Predoff 2012-08-04 15:01:15

回答

1

从你的代码中,我得到的印象是,你要做的是生成新的HTML服务器端并将其插入到文档中。如果是这样的情况下,尝试这样的事:

$.get('/save_positions', { ids : newOrder }).done(function(data) { 

    $("#position").html($(data).html()); 

}); 

如果你真的想返回JSON,那么你可能想返回对象的数组,并遍历它来生成新的HTML,也许使用模板引擎像小胡子,如:

无模板引擎:

$.getJSON('/save_positions.json', { ids : newOrder }).done(function(data) { 

    var positions = []; 

    $.each(data, function (key, val) { 

    // generate an element 
    var el = $("<tr>"); 

    // ... 

    positions.push(el); 

    }); 

    $("#position").empty().append(positions); 

}); 

JS:

$.getJSON('/save_positions.json', { ids : newOrder }).done(function(data) { 

    var positions = Mustache.render(template, data); 

    $("#position").html(positions); 

}); 

胡子模板:

{{#positions}} 

<tr id='{{activity.id}}'> 
    <td>{{activity.position}}</td> 
    <td>{{activity.url}}</td> 
    <td>{{activity.name}}</td> 
    <td>{{activity.estimated}}</td> 
    <td>{{activity.used}}</td> 
    <td>{{activity.created_at}}</td> 
</tr> 

{{/positions}} 
+0

我想要使用_activities.html.erb生成新的HTML ..这个命令是清理表元素,但没有填充JSON响应..我可以不用胡子? – Predoff 2012-08-04 14:58:30

+0

如果您在服务器上生成HTML,那么您可以发送HTML响应,而不需要JSON。尝试使用'。.get('/ save_positions'...',而不是代码中的$ .getJSON('/ save_positions.json'...')代码中的第一段代码,使用Chrome开发人员工具/ Firebug /东西,看看究竟是什么在响应,并确保它是你期望的HTML – JMM 2012-08-04 15:08:09

+0

谢谢JMM !!!!!我使用第一个选项(HTML服务器端)..但我改变了''$(“ '($(data).html());''by''$(“#position”).html(data);'' – Predoff 2012-08-04 16:25:45

相关问题