我有一个实例变量@lat_lng
,我需要每隔3秒刷新一次。我正在尝试使用respond_to AJAX请求。
welcome/_info
部分
#distance
=number_with_precision(event.distance_to(@lat_lng), precision: 2)
用户更新表单上的纬度和经度,然后将表单发送到cookie。然后,我将分割cookie以获取地理编码器distance_to
请求的纬度和经度。这是我的welcome_controller
@lat_lng = cookies[:lat_lng] ? cookies[:lat_lng].split("|") : nil
然后我在application.js
文件
var ajax_update_latlng = function(){
$.ajax({
url: '/welcome/refresh'
})
}
$(function(){
setInterval(ajax_update_latlng, 3000)
});
/welcome/refresh
正在显示GET http://localhost:3000/welcome/refresh 500 (Internal Server Error)
日志文件显示
Started GET "/welcome/refresh" for 127.0.0.1 at 2014-04-07 15:09:51 -0400
Processing by WelcomeController#refresh as */*
Rendered welcome/_info.html.haml (11.3ms)
Rendered welcome/refresh_latlng.js.haml (12.2ms)
Completed 500 Internal Server Error in 18ms
NameError - undefined local variable or method `event' for #<#<Class:0x007fdbeb4255d0>:0x007fdbeb430958>:
我的欢迎控制器中有刷新操作
def refresh
respond_to do |format|
format.js {render :action =>"refresh_latlng.js" }
end
end
这会呈现javascript文件refresh_latlng.js
$('#distance').html("#{escape_javascript(render 'welcome/info', data: @lat_lng)}");
我不知道它为什么找不到它,我也希望它更新我的控制器中的变量,因为我也在另一个区域使用该变量。
删除了rake routes
,因为它无关紧要。
看起来它正在刷新我的事件变量,当它刷新时给它服务器错误(500)。这是部分从欢迎控制器中拉出的地方。
def index
@events = Event.all
@lat_lng = cookies[:lat_lng] ? cookies[:lat_lng].split("|") : nil
@locations= Event.where( "start = ?", Date.today).all
@hash = Gmaps4rails.build_markers(@locations) do |location, marker|
marker.lat location.latitude
marker.lng location.longitude
marker.infowindow render_to_string(:partial => "info", :locals => { :event => location }) <--this is pulling the info partial
marker.picture({
"url" => "https://addons.cdn.mozilla.net/img/uploads/addon_icons/13/13028-64.png",
"width" => 32,
"height" => 37
})
end
完整_info
部分
.event-data{id: event.id}
.row
.small-3.columns.mright
.avatar
%img.avatar{:src => event.user.avatar(:thumb), class: 'th'}
.small-6.columns.mleft.left-border
.name
%strong
= event.user.name
.address
= event.address
.times
= event.start.strftime('%I:%M')
to
= event.end.strftime('%I:%M')
.small-2.columns.left-border
.distance
=number_with_precision(event.distance_to(@lat_lng), precision: 2)
%br
miles away