Подтвердить что ты не робот

Периодически автосохраняемая форма

Как реализовать периодическое сохранение формы в фоновом режиме? То же самое, что делает gmail.

4b9b3361

Ответ 1

setInterval(function(){
  var form = $('#my-form-id');
  var method = form.attr('method').toLowerCase();      // "get" or "post"
  var action = form.attr('action');                    // url to submit to
  $[method](action, form.serialize(), function(data){
    // Do something with the server response data      
    // Or at least let the user know it saved
  });
},10000);                                              // do it every 10 seconds

Если вы не хотите использовать метод формы, но всегда хотите использовать "post", используйте:

$.post(action, form.serialize(), ... );

И если вы хотите предоставить свое собственное действие для автосохранения, которое отличается от действия для фактического сохранения:

$.post("/autosave/comments", form.serialize(), ... );

Ответ 2

Вам понадобится синхронизированный цикл на стороне клиента, который сохранит форму каждые х секунд/минут. Грубым способом сделать это будет иметь функцию setTimeout javascript, которая собирает значения поля формы и обновляет модель с помощью запроса AJAX (PUT in Rails).

Пример

Здесь грубый способ сделать это (т.е. может быть лучший способ):

// repeat every 10 seconds
var repeatTime = 10 * 1000; 

function updateModel(){
    // get field values (using jQuery, etc.)
    // make ajax request using these field values 
    //(make sure put parameters match model attribute names)
    console.log('updated');
    setTimeout(updateModel, repeatTime); // start call over again
}

setTimeout(updateModel, repeatTime);

Я включил console.log, чтобы вы могли проверить это в Firebug прямо сейчас и увидеть, что updateModel выполняется каждые 10 секунд. Я бы рекомендовал использовать jQuery для генерации запросов PUT AJAX.

Ответ 3

Почему бы не сделать это исключительно на клиенте, используя локальную базу данных (или что-то еще)? Это должно уменьшить сложность, нагрузку на сервер и использование полосы пропускания.

Постоянное или сеансовое хранилище - независимо от того, что необходимо - и вы можете сохранить после каждого нажатия клавиши: нет необходимости в setTimeout().

Ответ 4

Sisyphus.js: Gmail-подобные черновики и бит больше. Плагин разработан для сохранения данных html-форм в LocalStorage для их восстановления после сбоев браузеров, закрытия вкладок и других катастроф. http://sisyphus-js.herokuapp.com

Статья Smashing Magazine: http://coding.smashingmagazine.com/2011/12/05/sisyphus-js-client-side-drafts-and-more/