rails 3: (возможно, вопрос ajax) нужно встраивать баннер на html-странице, который каждые N секунд получает новую «шутку» из нашего приложения - PullRequest
0 голосов
/ 25 июня 2011

Я никогда не занимался аджаксом, и это, кажется, идеальная возможность добавить в мое приложение, чтобы узнать, как это сделать ...

Мое приложение поддерживает базу данных шуток.

Я хотел бы предоставить любому человеку простой способ добавить небольшой баннер в html на своей веб-странице, который будет отображать новую шутку каждые N секунд.

Похоже, два подхода:

1) iframe, где URL / представление, отображаемое iframe, имеет мета-тег обновления и случайным образом извлекает шутку при каждом обращении к URL.Но iframes могут изменить размер, чтобы соответствовать содержимому, и я не уверен, что браузеры обновят содержимое iframe.

2) правильным способом ... ajax.Но я понятия не имею, является ли это «большой» или «тривиальной» работой для приложения rails 3, и не знаю, с чего начать.

Любые указания по этому поводу будут высоко оценены!

1 Ответ

1 голос
/ 26 июня 2011

Я буду использовать 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) для обработки и визуализации клиентом. Отсюда и разница в размерах между набросками на стороне клиента и на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...