2012-08-04 82 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

相關問題