2015-04-28 6 views
6

Ich habe einen jQuery-Skript, dass das Laufen Ajax-Skript all 2 SekundenWie wird dieses Skript in einer separaten Datei angezeigt?

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); 
    }); 

und wenn ich dieses Skript in Vermögen versuchen, zu bewegen und ihn über javascript_include_tag nennen - dann geht es in der gesamten Anwendung zu arbeiten, nicht nur in der Ansicht, wo ich ihn anrufe.

wie reparieren?

upd

ich dieses Skript setzen um app/assets/Javascripts/foobar.js, und rufen Sie ihn im Hinblick auf dieses

= javascript_include_tag 'foobar' 
+0

Könnten Sie bitte lassen Sie mich wissen, in welcher Datei Sie diesen Js-Code setzen, wenn es in application.js ist, dann entfernen Sie von diesem und fügen Sie Ihr Modell js.coffee Datei hinzu. –

+0

eine Frage aktualisieren – wweare

+0

Ich denke, diese Frage hat genau das, was Sie suchen http://stackoverflow.com/questions/602147/javascript-file-per-view-in-rails – potatopeelings

Antwort

0

Wenn Schienen erzeugt app/Vermögen /javascripts/application.js enthält diese Zeile automatisch:

//= require_tree . 

Das weist Rails an, jede Datei in diesem Verzeichnis in application.js aufzunehmen, die standardmäßig im Kopf der Seite aufgerufen wird. Diese Zeile in Ihrem foobar.js Datei:

$(document).ready(function(){ 
    getvalue(); 
    setInterval('getvalue()', 2000); 
    }); 

Javascript erzählt der DOM jedes Mal, das diesen Code ausgeführt wird, geladen. Aus diesem Grund wird der Code auf jeder Seite ausgeführt.

Um dies zu verhindern, haben Sie mehrere Optionen (siehe this post für einige Ideen), aber was am einfachsten sein könnte, ist nach einem Element im DOM zu suchen, das nur auf den Seiten ist, auf denen dies ausgeführt werden soll, etwa so:

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

danke Mann! gute Antwort, ich muss anfangen, js zu lernen :) – wweare

Verwandte Themen