我使用的是Rails 4,而且我对JSON对象很陌生。
我有一个控制器:
class UsersController < ApplicationController
def select_users
@users = User.all
respond_to do |format|
format.html
format.js {}
format.json {
render json: {:users => @users}
}
end
end
end
和javascript users.js:
$.ajax({
url: "/users/select_users",
dataType: "json",
data: {
prezzario: ui.item.value
},
success: function(data) {
$('#usersList').append(data.users);
}
});
现在我想在div中呈现这个用户集合,但我不知道如何。在数据响应中,我在控制台中有正确的数据,对象如下:
{"users":[{"_id":{"$oid":"536cf7b6b8dd181f4b7acf9f"},"children":[{"$oid":"536cf7b6b8dd181f4b7acfa0"},{"$oid":"536cf7b7b8dd181f4b7acfd1"}],"description":"Some description.","name":"My name","user_id":"1"},{...........}]}
我有一个部分/users/_users.html.erb,包含经典的users.each和所有属性的打印。 如果我试试
$('#usersList').append("<%= render 'users', :locals{ :users => "+data.users+"} %>");
我在div #usersList <%= render 'users', :locals{ :users => undefined }%>
我想创建一个部分模板并用它来呈现用户。我怎么能这样做?
答案 0 :(得分:3)
有3种解决方案(我能想到):
您的控制器可以在您附加到js的后端呈现HTML,例如
class UsersController < ApplicationController
def select_users
@users = User.all
render "view", :users => @users
end
和
success: function(data) {
$('#usersList').append(data);
}
您可以使用Mustache或Handlebars之类的东西。从未使用它,所以我不能做一个正确的例子。遗憾。
您可以将成功代码中的html呈现为
success: function(data){
data.users.forEach(function(user){
$user_html = $("<div class='user'>" + user.name + "<!-- etc --!/></div>");
$('#usersList').append($user_html);
});
});
答案 1 :(得分:1)
您必须先$.parseJSON(data);
。
像
$.ajax({
url: "/users/select_users",
dataType: "json",
data: {
prezzario: ui.item.value
},
success: function(data) {
var r = $.parseJSON(data);
console.log(r.users)//This is where Your users are
}
});