2010-09-07 12 views

Odpowiedz

25

szukałem właściwy sposób to zrobić z Rails 3, ale teraz jestem przekonany, że nie ma odpowiednika do periodically_call_remote w Rails 3. Aby uzyskać dokładnie taką samą funkcjonalność wykonanej z jQuery, użyłem:

$(document).ready(
    function(){ 
    setInterval(function(){ 
     $('#mydiv').load('/controller/action'); 
    }, 3000); 
    }); 
+0

Próba wdrożenia tego, ale zmagania. Jeśli wstawię ten kod do pliku application.js, uwzględnij domyślne ustawienia javascript w nagłówku i element DOM z id = "mydiv", to powinien on automatycznie się połączyć, prawda? Ponadto, w jaki sposób mogę dynamicznie aktualizować adres URL, na przykład, jeśli mam zagnieżdżony zasób, więc muszę załadować "/ controller /: id/action", gdzie: id jest ustawione dynamicznie? –

+0

Aby to zrobić, po prostu dodaj element danych id-elementu do swojego elementu i załaduj go za pomocą .data() jQuery i na pewno możesz zrobić to samo z adresem URL. –

3

Użyj funkcji setInterval, aby okresowo uruchamiać funkcję wywołującą wywołanie AJAX. Jeśli robisz to z jQuery, to może być coś takiego:

var pollBackend = function() { 
    $.getJSON("/foo/bar/poll"); 
} 

setInterval(pollBackend, 5000); 

To będzie próbował sondować dany adres URL JSON danych co 5 sekund.

5

Jeśli naprawdę chcesz go używać, a następnie można zainstalować wtyczkę starszego, który posiada tę metodę:

http://github.com/rails/prototype_legacy_helper

Rails sprzyja teraz UJS.

Sprawdź te linki Więcej informacji na temat UJS w Rails 3:
http://railscasts.com/episodes/205-unobtrusive-javascript
http://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3/

Zrobiłem krótki writeup na ten temat w odniesieniu do prototypu i znacznik link_to_remote:
http://www.cowboycoded.com/2010/07/20/replacing-link_to_remote-with-ujs-in-rails-3-prototype/

Mam nadzieję że to pomoże!

+0

Może to również pomóc: http://railscasts.com/episodes/229-polling-for-changes – johnmcaliley

1

to jest to, czego potrzebujesz do okresowego wywołania ajax, wymienić SOME_PATH z własnym trasie relaksującego:

<%= javascript_tag do -%> 
$(document).ready(
    function(){ 
    setInterval(function(){ 
     $.ajax({ 
     url: "<%= some_path %>", 
     type: "GET", 
     dataType: "script" 
    }); 
    }, 60000); 
}); 
<% end -%> 

plik index.js.erb będzie wyglądać następująco:

$('#mydiv').html("<%= escape_javascript(render(:partial => 'my_partial')) %>"); 
2

Jeśli chcesz nadal korzystać prototype.js, więc można zrobić co następuje:

<%= content_for :js do %> 
    new Ajax.PeriodicalUpdater("mydiv", 
    "/controller/action", 
    { frequency: 5, 
     method: 'get' }) 
<% end %> 

Więcej o Ajax.PeriodicalUpdater here.