Jquery 如何让Rails定期调用控制器方法

Jquery 如何让Rails定期调用控制器方法,jquery,ruby-on-rails,ruby,ajax,Jquery,Ruby On Rails,Ruby,Ajax,我有一个应用程序,它依赖于在控制器中调用web服务来获取数据。我想添加一个页面自动刷新内容的功能,即根据设定的时间段调用操作。我发现很多帖子都暗示了我的问题,我也尝试过setInterval,但让我困惑的是,每次更新都会触发两次。以下是代码: $(document).ready( function(){ var loader = function(){ $('.container').load('/dashboard/index'); }; setInte

我有一个应用程序,它依赖于在控制器中调用web服务来获取数据。我想添加一个页面自动刷新内容的功能,即根据设定的时间段调用操作。我发现很多帖子都暗示了我的问题,我也尝试过
setInterval
,但让我困惑的是,每次更新都会触发两次。以下是代码:

$(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
class仪表板控制器
伪造者阶级

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
模块伪造者
来源_A=“A”
SOURCE_B=“B”
类型A=Faker::Lorem.words(num=10)
类型B=Faker::Lorem.words(num=4)
def制假器(类型、计数)
假=[]
案例类型
当“报告”
count.times{fake','),
可用:带分隔符的数字(Faker::number.number(5),:delimiter=>,),
上次连接:Random.rand(10.weeks).ago.strftime(“%Y-%m-%d%H:%m:%S”)}
结束
def伪_数据_源
数据源=[]
[“A”,“B”]每一个都是来源|

数据来源你能这样试试吗

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

试过了。它的行为方式相同。它第一次触发一次,每间隔快速连续触发两次。听起来像是应用程序代码问题。代码中的某些内容是在第一次更新后2次重新加载包含此JS代码的文件。你能检查你的代码流,看看它是否如预期的那样工作吗?这似乎是正确的@steve_gallagher,你能发布相应的控制器代码吗?