我有:
<p id="click">Click here</p>
在主计长中:
@details=Family.find_by(famid: params[:famid])
respond_to do |format|
format.html
format.json {render :json => @details}
end
以及:
$('#click').on('click',function(){
$.ajax({
type: "GET",
data: 'famid='+id,
dataType: "json",
url: "/map",
success: function(data){
document.getElementById('myModal').innerHTML = data.famid
}
});
}
<div id="myModal"></div>
,这很好用。myModal
famid
div标记由正确的famid
值填充。但是我只想通过ajax将数据发布到控制器,并查询数据库和,而不是使用变量。
$('#click').on('click',function(){
$.ajax({
type: "POST",
data: 'famid='+id,
dataType: "json", //do I need this? should it be html?
url: "/map"
});
}
现在,我想使用@details
变量,如:
<div id="#myModal"> <%= @details.famid %> </div>
我该怎么做?
更新: Ok,我做了以下工作,一切都很好(感谢@Rich & @NitinJ),除了部分。它没有被正确渲染。
map.js.erb
$("#myModal").html("<%= escape_javascript(render(@details))%>");
_details.html.erb
<h3><%= @details.famid %></h3>
map.html.erb
<div id="myModal">
<%= render @details %>
</div>
更新:
现在,部分在浏览器控制台中正确呈现。我可以看到正确地填充了#myModal
div。但是它只显示在浏览器控制台中,而不显示在map.html.erb
页面上。这里怎么了?
发布于 2014-01-04 04:30:10
Ajax
$('#click').on('click',function(){
$.ajax({
type: "POST",
data: {famid: id}, //you need to serialize your data
dataType: "json", //do I need this? should it be html?
url: "/map"
});
}
AJAX非常简单--它代表您发送请求。$.ajax
函数来自JQuery,因此要使其正确,只需将正确的参数传递给它
路由
#config/routes.rb
post "map", to: "your_controller#map"
因为您发送的是POST
请求(而不是GET
),所以需要一个处理请求的路径。由于您要发送到/map
,您需要确保您将捕获该请求&发送到正确的控制器
控制器
#app/controllers/your_controller.rb
def map
@details = Family.find_by(famid: params[:famid])
respond_to do |format|
format.html
format.json {render :json => @details}
end
end
响应
因为您正在处理JSON,所以我相信您最好直接处理视图中的响应,如下所示:
$('#click').on('click',function(){
$.ajax({
type: "POST",
data: {famid: id}, //you need to serialize your data
dataType: "json", //do I need this? should it be html?
url: "/map",
success: function(data) {
details = jQuery.parseJSON(data)
$('#modal_body').html(details.famid);
}
});
}
据我所知,JSON的目的是简洁地传递数据(尽可能少移动部分),因此,我们总是处理来自Ajax请求的JSON响应;而不是单独的文件
您可以使用jQuery.parseJSON函数来处理这个问题,然后创建一个可以附加到页面的对象。
更新
我相信你的问题是你用的是JSON
您不能用JSON加载rails .js
文件--您必须加载.json.erb
,或者在前端视图中加载进程。您可能希望将请求更改为标准JS:
#JS
$('#click').on('click',function(){
$.ajax({
type: "POST",
data: {famid: id},
url: "/map"
});
}
#Controller
def map
@details = Family.find_by(famid: params[:famid])
respond_to do |format|
format.js
format.html
end
end
#app/views/controller/map.js.erb
$("#myModal").html("<%=j render(@details) %>");
发布于 2014-01-03 23:21:26
您必须创建一个js.erb模板,而不是呈现此模板。现在您可以在*.js.erb模板中访问这个变量了。
alert("<%=@details.famid%>")
您还可以通过以下方式更新p标记的文本
$("modal-body").text("<%=@details.famid%>")
https://stackoverflow.com/questions/20918138
复制