Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2013, 22:50   #1
soonner
Пользователь
 
Аватар для soonner
 
Регистрация: 14.03.2009
Сообщений: 97
По умолчанию Автосохранение.

Добрые вечер дорогие мои. Нужна ваша помощь. Вот в чем задача. Нужно по кейапу сохранять. Но есть большое НО. Нужно сохранять после последнего нажатия кейапа. Сейчас это работает, в том случае если набирать текст со скоростью домохозяйки. Реализовано это примерно так. По кейапу вызывается функция

Код HTML:
timeOut(e,url,respons,10);
которая описана ниже

Код HTML:
 function timeOut(string,fname,old,p) {

                var i = p;
                setInterval(function() { counter() }, 500);
                function counter()
                {
                  if(i!=0) {
                      document.getElementById('autoSave').innerHTML = i--;
                  } else {
                      save (string,fname,old);

                      }
                }

            }
и все работает. Но. Если быстро печатать, то просто ужас. Все падает и начинается жер ресурсов. Вообщем какие есть альтернативы такому метода.
soonner вне форума Ответить с цитированием
Старый 02.10.2013, 23:06   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Проверять надо текст от кейапа и текущий, если == то сохранять, иначе повторить цикл ...
eval вне форума Ответить с цитированием
Старый 02.10.2013, 23:39   #3
soonner
Пользователь
 
Аватар для soonner
 
Регистрация: 14.03.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
Проверять надо текст от кейапа и текущий, если == то сохранять, иначе повторить цикл ...
Когда вызывать функцию не имеет значения. Сама функция плохо работает.
soonner вне форума Ответить с цитированием
Старый 02.10.2013, 23:58   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

Ну а вопрос тогда в чем? если работает плохо значит надо переписать чтобы работала хорошо
eval вне форума Ответить с цитированием
Старый 03.10.2013, 00:10   #5
soonner
Пользователь
 
Аватар для soonner
 
Регистрация: 14.03.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
Ну а вопрос тогда в чем? если работает плохо значит надо переписать чтобы работала хорошо
Если Вы дочитаете пост до конца, то увидите, что я спрашиваю какие есть альтернативы такому метода. Ну или как минимум совет как ее улучшить. Принцип ее работы прост. Если я набираю. То переменная "P" постоянно обновляется и не опускается до нуля. Если я перестал набирать, некоторое время прошло, переменная стала нулем после чего выполнилась функция "save". И в принципе если печатать медленно, то все работает. Но если печатать с нормальной скоростью. Больше 150 знаков в минуту, то браузер не выдерживает такой нагрузки и падает или повисает пока не сожрет всю ОЗУ
soonner вне форума Ответить с цитированием
Старый 03.10.2013, 00:48   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

я вообще не понимаю за каким тут эти р и i, посмотрите как работают теже поисковики и не изобретайте велосипед
eval вне форума Ответить с цитированием
Старый 03.10.2013, 09:38   #7
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Если function timeOut вызывается не один раз, то юзай setTimeout вместо интервала.
При необходимости сноси таймер (clearTimeout).
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 03.10.2013, 14:14   #8
soonner
Пользователь
 
Аватар для soonner
 
Регистрация: 14.03.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от Naive Посмотреть сообщение
Если function timeOut вызывается не один раз, то юзай setTimeout вместо интервала.
При необходимости сноси таймер (clearTimeout).
Спасибо. Хорошая идея. Я правда не уверен, что реализовал ее так как Вы думали. Но примерно вышло так.

если документ изменен то
Код HTML:
clearTimeout(y);
timeOut(editor.getValue(),url,respons);
ну и сама функция

Код HTML:
 function timeOut(string,fname,old) {
           y =  setTimeout(function(){ save (string,fname,old);}, 2000);
           function save (string,fname,old) {
               $.ajax({
                   type: "POST",
                   url: "editwork.php",
                   cache: false,
                   data:{'s':string,'f':fname,'o':old},
                   success: function(r){
                       if(r){
                           document.getElementById('autoSave').innerHTML = (count++).toString();
                       }
                   }
               });
            }
        }
И пока. Вроде работает как нужно.
soonner вне форума Ответить с цитированием
Старый 04.10.2013, 13:41   #9
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

переменную y нужно задать во внешнем контексте, а так все путем
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема автосохранение andriypadun Microsoft Office Word 0 15.09.2012 18:31
Автосохранение Ципихович Эндрю Microsoft Office Word 8 06.02.2012 18:09
Автосохранение паролей Exterminated PHP 2 03.02.2012 20:37
Автосохранение StringGrid1 Афанасий[vedma] Общие вопросы Delphi 1 17.01.2012 10:17
Автосохранение A_L_E_X Microsoft Office Excel 12 13.08.2010 13:11