我的应用程序在/ index处有一个表。此表填充了DB的记录。还有另一个第三方服务对此应用程序执行“发布”并创建新的数据库记录。我想在/ index页面上使用AJAX显示此记录,而无需刷新页面。
第三方服务的新记录以每分钟2次的速度发布。所以我想在我的javascript中使用一个定时器循环(30秒)实现这个,它会发出一个get at / get_latest_leads并定义一个控制器动作get_latest,它获取在过去30秒内输入/更新的记录。然后使用id(在有案例的情况下检查重复条目),在客户端我将使用javascript将这些新记录预先挂起到表中。
控制器
# GET /leads
# GET /leads.json
def index
@leads = Lead.find(:all, :conditions => {:is_valid => true}, :order => "id DESC").paginate(:per_page => 30, :page => params[:page])
respond_to do |format|
format.html # index.html.erb
format.json { render json: @leads }
format.js
end
end
def get_latest
logger.info "in get_latest"
@leads = Lead.where('updated_at > ?', Time.now - 30.seconds)
@leads.each { |lead|
logger.info "#{lead.name}"
}
respond_to do |format|
format.json { render json: @leads }
end
end
的routes.rb
get 'get_latest_leads', :to => 'leads#get_latest', as: :get_latest_leads
index.js.erb的
alert("here1");
setInterval(
function(){
new Ajax.Request('get_latest_leads' + '.json', {
alert("here2");
method: 'get',
onSuccess: function(transport){
var leads = transport.response.responseJSON;
// insert the last checked time into <div id='time'></div>
// $('time').innerHTML = records.time;
// loop over response JSON and do what you want with the data
leads.each(function(lead){
$$('table#leads').insert({
top: '<tr><td>'+lead.attribute+'</td></tr>';
});
});
}
});
},
30000
);
问题是我的js根本没有被调用,浏览器/服务器端没有错误。当我从浏览器/get_latest_leads.json处做手动请求时,它会以json的形式获取最新的潜在客户。但我的js并没有称之为。你能告诉我出了什么问题吗?
更新
我按照here的说明将apps树中的js相应地移动到assets / javascripts / leads / index.js
这使得呼叫成功,现在我确实每30秒收到一次警报,这意味着该功能正在运行。然而,现在我得到了一个“未被捕获的参考错误ajax未被定义”。