Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.03.2013, 15:22
Новичок на форуме
Отправить личное сообщение для dmit.medv Посмотреть профиль Найти все сообщения от dmit.medv
 
Регистрация: 01.03.2013
Сообщений: 2

Как избавиться от рекурсии?
Здравствуйте.
По нажатию кнопки:
<button onclick = "goCreatePackagePassports()">Go!</button>

вызывается функция:
function goCreatePackagePassports() {
    $.ajax({
      type: "POST",
      url: "delete1.php",
      data: "name=John&location=Boston",
      success: function(msg) {  // обработка ответа
        $('#status').append(msg + '<br />');
        if (msg == 'done') return;
        else goCreatePackagePassports(); // Проблемное место - рекурсия!
      }
    });
    return;
}


Требуется обращаться через ajax к файлу delete1.php до тех пор пока он не вернет "done". Я смог реализовать это только с помощью рекурсии. Подскажите пожалуйста как можно переписать код, чтобы избавиться от рекурсии. На сколько я знаю, рекурсия требует дополнительной памяти, а количество обращений к файлу delete1.php неизвестно, и вполне может исчисляться тысячами.
На сколько это критично для браузера? И как бы вы переписали мой код?

спасибо..
Ответить с цитированием
  #2 (permalink)  
Старый 01.03.2013, 15:47
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

DDOS'ить свой же сервер - хм, прикольно )
А можете объяснить зачем так делать?
Ответить с цитированием
  #3 (permalink)  
Старый 01.03.2013, 16:14
Новичок на форуме
Отправить личное сообщение для dmit.medv Посмотреть профиль Найти все сообщения от dmit.medv
 
Регистрация: 01.03.2013
Сообщений: 2

Сообщение от danik.js Посмотреть сообщение
А можете объяснить зачем так делать?
"Требуется обращаться через ajax к файлу delete1.php до тех пор пока он не вернет "done"."

Изначально файл delete1.php был очень нагружен, и в связи с ограничением времени исполнения скрипта пришла мысль делать однократные запросы (задача позволяет это сделать), чтобы уменьшить обойти это ограничение. Обойти получилось, но вот рекурсия мне не нравится.

*пришла мысль избавиться от рекурсии с помощью дополнительной функции, если получится, выложу результат.
Ответить с цитированием
  #4 (permalink)  
Старый 13.03.2013, 01:23
Аватар для RazZzeR
Кандидат Javascript-наук
Отправить личное сообщение для RazZzeR Посмотреть профиль Найти все сообщения от RazZzeR
 
Регистрация: 11.12.2011
Сообщений: 146

Сообщение от dmit.medv Посмотреть сообщение
"Требуется обращаться через ajax к файлу delete1.php до тех пор пока он не вернет "done"."

Изначально файл delete1.php был очень нагружен, и в связи с ограничением времени исполнения скрипта пришла мысль делать однократные запросы (задача позволяет это сделать), чтобы уменьшить обойти это ограничение. Обойти получилось, но вот рекурсия мне не нравится.

*пришла мысль избавиться от рекурсии с помощью дополнительной функции, если получится, выложу результат.
сомневаюсь, что твоя функция будет кому либо полезна

Ты в курсе, что ты создал рекурсию, и хочешь от нее избавиться?, тогда твоя функция потеряет смысл
все просто. Оставляем рекурсию, но с таймером.
Таймер можно в любой момент оборвать.
А так, на будущее, если будешь заниматься этим серьезно: пулинг, это плохой вариант.


Все должно работать
function goCreatePackagePassports() {
    $.ajax({
      type: "POST",
      url: "delete1.php",
      data: "name=John&location=Boston",
      success: function(msg) {  // обработка ответа
        $('#status').append(msg + '<br />');
        if (msg == 'done'){
         return;
        } else {
         recurs = setTimeout(goCreatePackagePassports, 1000); 
      }
    });
    return;
}
Ответить с цитированием
  #5 (permalink)  
Старый 13.03.2013, 02:00
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

А почему бы в самом файле "delete1.php" не выполнять необходимые действия до тех пор пока он не сможет вернуть "done" ?

Сообщение от dmit.medv
в связи с ограничением времени исполнения скрипта
А попробовать снять ограничение, и выполнять скрипт столько, сколько нужно по времени ?
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как при быстром многократном клике по кнопке обрабатывать только первый клик battrack jQuery 3 22.03.2012 10:47
jquery accordion как избавиться от прокрутки страницы. cesar5 Events/DOM/Window 0 24.01.2012 15:52
Как отловить обратное событие "click" ? jsuse Общие вопросы Javascript 2 18.01.2012 00:16
как реализовать передачу функции в функцию?? czp Общие вопросы Javascript 10 29.11.2011 19:21
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56