0

/index にテーブルを持つアプリがあります。このテーブルは、DB からのレコードで埋められます。このアプリに「投稿」して新しい DB レコードを作成する別のサードパーティ サービスがあります。ページを更新せずに /index ページに AJAX を使用してこのレコードを表示したいと考えています。

サード パーティ サービスからの新しいレコードは、1 分あたり 2 の割合で取得されます。そこで、/get_latest_leads で get を発行する JavaScript で (30 秒の) タイマー ループを使用してこれを実装し、最後の 30 秒で入力/更新されたレコードを取得するコントローラー アクション get_latest を定義することを考えました。次に、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

ルート.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の指示に従い、アプリ ツリー内の js を assets/javascripts/leads/index.js に移動しました。

これにより、呼び出しが成功し、30 秒ごとにアラートが表示されるようになりました。これは、関数が機能していることを意味します。ただし、「キャッチされていない参照エラー ajax が定義されていません」というメッセージが表示されるようになりました。

4

0 に答える 0