如何在单独的文件中查看此脚本?

wwe*_*are 6 jquery ruby-on-rails

我有一个jquery脚本,每2秒运行一次ajax脚本

javascript:
  function getvalue(){
    $.ajax({
      url: "http://localhost:3000/companies/#{@company.url}",
      type: "GET",
      dataType: "json",
      success: function (json) {
      $('.blabla').html(json.clicks);
      $('.tratata').html(json.shows);
      }
    });
  }

javascript:
  $(document).ready(function(){
    getvalue();
    setInterval('getvalue()', 2000);
  });
Run Code Online (Sandbox Code Playgroud)

当我试图在资产中移动这个脚本并通过javascript_include_tag它调用它时 - 它开始在整个应用程序中工作,而不仅仅是在我称之为他的视图中.

如何解决?

UPD

我把这个脚本放到app/assets/javascripts/foobar.js中,然后打电话给他

  = javascript_include_tag 'foobar'
Run Code Online (Sandbox Code Playgroud)

l85*_*85m 0

当 Rails 生成 app/assets/javascripts/application.js 时,它会自动包含以下行:

//= require_tree .
Run Code Online (Sandbox Code Playgroud)

它告诉rails将该目录中的每个文件包含到application.js中,默认情况下在页面的头部调用它。foob​​ar.js 文件中的这一行:

  $(document).ready(function(){
    getvalue();
    setInterval('getvalue()', 2000);
  });
Run Code Online (Sandbox Code Playgroud)

告诉 javascript 在每次加载 DOM 时运行此代码。这就是您的代码在每个页面上运行的原因。

为了防止这种情况,你有多种选择(请参阅这篇文章了解一些想法),但最简单的可能是在 DOM 中查找一个元素,该元素仅位于你希望运行的页面上,如下所示:

  $(document).ready(function(){
    if( $("#element-id-only-on-foobar-pages").is(":visable") ) {
        getvalue();
        setInterval('getvalue()', 2000);
    }
  });
Run Code Online (Sandbox Code Playgroud)