0

我有一个应用程序,在 /index 上有一个表。该表充满了来自数据库的记录。还有另一个第三方服务向该应用程序“发布”并创建新的数据库记录。我想在 /index 页面上使用 AJAX 显示此记录,而无需刷新页面。

来自第三方服务的新记录以每分钟 2 条的速度出现。所以我想在我的javascript中使用一个计时器循环(30秒)来实现这个,它将在/get_latest_leads发出一个get,并定义一个控制器操作get_latest,它会在最后30秒内输入/更新记录。然后使用 ids(检查重复条目,以防有任何重复条目)。在客户端,我将使用 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

路线.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 没有调用它。你能告诉我出了什么问题吗?

更新:

我按照此处的说明将应用程序树中的 js 移动到 assets/javascripts/leads/index.js

这使呼叫成功,现在我确实每 30 秒收到一次警报,这意味着该功能正在运行。但是,现在我收到“未定义未捕获的引用错误 ajax”。

4

0 回答 0