Я буду использовать jQuery для этого примера, но общая методика должна работать примерно так же, как и в любой другой среде AJAX.
В вашем JavaScript вы захотите использовать $.ajax
для получения новой цитаты с вашего сервера и setTimeout
для периодических обновлений; как то так:
var n_seconds = 5; // Or whatever you want.
var timer = null;
function replace_quote() {
// Do a $.ajax call to your server.
$.ajax({
url: '/some/route',
type: 'get',
dateType: 'htm;',
success: function(data) {
// Replace the quote with the new one.
$('#quote-container').html(data);
// And restart the timer.
timer = setTimeout(replace_quote, 1000 * n_seconds);
}
});
}
replace_quote();
Если вы начинаете с пустого поля кавычек, вы можете просто позвонить replace_quote()
, чтобы присвоить ему начальное значение при вызове AJAX.
Вы также можете использовать setInterval
для вызова заменителя котировок. Тогда вам не нужно будет перезапускать таймер вручную с помощью вызова setTimeout
, но вы рискуете, если наши обновления будут бороться друг с другом, если вызов AJAX занимает больше времени, чем n_seconds
.
Если вы все еще хотите предоставить ссылку для обновления цитаты, привяжите ссылку к функции JavaScript примерно так:
function manually_replace() {
clearTimeout(timer);
replace_quote();
}
Вызов clearTimeout
эффективно сбрасывает таймер, когда они сами изменяют котировку.
Затем в своем приложении Rails вы добавите маршрут для /some/route
, и контроллер просто получит случайную цитату из вашей базы данных, а затем с помощью render :partial => 'quote'
отправит обратно только HTML-фрагмент для цитаты без всяких обычная верстка упаковки.
Обработка запросов AJAX в Rails (или любой другой платформе) в значительной степени аналогична обработке любого другого запроса, с той лишь разницей, что вы не будете отправлять обратно полную страницу, вы просто отправляете небольшой фрагмент HTML или BLOB-объект JSON (или XML) для обработки и визуализации клиентом. Отсюда и разница в размерах между набросками на стороне клиента и на стороне сервера.