0

データを取得するためにコントローラーで Web サービス呼び出しを行うことに依存するアプリケーションがあります。ページがコンテンツを自動的に更新する機能、つまり、設定された期間に基づいてアクションを呼び出す機能を追加したいと考えています。私の問題をほのめかす多くの投稿を見つけましたsetInterval。私には不可解なことに、更新ごとに2回起動したものを試しました。そのためのコードは次のとおりです。

$(document).ready(
  function(){
    var loader = function(){
      $('.container').load('/dashboard/index');
    };
    setInterval(loader, 3000);
  });

これは ajax の問題だと思いますが、更新を通知するトリガー イベントがありません。どんな助けでも大歓迎です。

私のコントローラーコード:

class DashboardController < ApplicationController
  include ActionView::Helpers::NumberHelper
  include FakeMaker

  def index
    @reports = fake_maker("report", 22)
    @workstations = fake_maker("workstation", 8)
    @data_sources = fake_maker("data_source", 2)
  end
end

FakeMaker クラス

module FakeMaker
  SOURCE_A = "A"
  SOURCE_B = "B"
  TYPES_A = Faker::Lorem.words(num = 10)
  TYPES_B = Faker::Lorem.words(num = 4)

  def fake_maker(type, count)
    fake = []
    case type
    when "report"
      count.times { fake << fake_report }
    when "workstation"
      count.times { fake << fake_workstation }
    when "data_source"
      fake = fake_data_source
    end
    fake
  end

  def fake_report
    report = { source: [SOURCE_A, SOURCE_B].sample,
               count: number_with_delimiter(Faker::Number.number(5), :delimiter => ',') }
    report[:type] = report[:source] == SOURCE_A ? TYPES_A.sample : TYPES_B.sample.capitalize
    report
  end

  def fake_workstation
    { name: Faker::Lorem.word,
      downloaded: number_with_delimiter(Faker::Number.number(3), :delimiter => ','),
      available: number_with_delimiter(Faker::Number.number(5), :delimiter => ','),
      last_connect: Random.rand(10.weeks).ago.strftime("%Y-%m-%d %H:%M:%S") }
  end

  def fake_data_source
    data_sources = []
    ["A", "B"].each do |source|
      data_sources << { type: source,
                        name: Faker::Internet.url,
                        status: ["UP", "DOWN"].sample }
    end
    data_sources
  end
end
4

1 に答える 1

1

この方法で試してみませんか

$(document).ready(
  function(){
    setInterval(function(){
       $('.container').load('/dashboard/index');
    }, 3000);
  });
于 2013-09-11T23:39:47.317 に答える