Очередь ajax-запросов и deferred-объекты
Мне требуется реализовать функцию, которая через определенные промежутки времени опрашивает url (обязательно нужна очередь ajax-запросов), до тех пор, пока не кончится число попыток, либо не будет возвращен корректный ответ.
Вот так я себе представляю работу с функцией: GetTask('somtask_id', {repeat: 2, delay: 500}) .done(function(task){ console.log('Задача готова'); }) .fail(function(){ console.log('Я исчерпал попытки, хозяин'); }); Для реализации очереди я использую $.ajaxQueue. Несмотря на то, что я вообще плохо понимаю, как работать с очередями в jQuery, я написал следующий код. Проблема в том, что у меня никогда не выводится "Я исчерпал попытки, хозяин", а я в упор не понимаю, как это сделать. Спасибо за внимание, надеюсь, что натолкнете на мысль. |
Epolypero,
не наю чот сложно всё - вот Аякс http://jquery-docs.ru/Ajax/jQuery.ajax/#options можно как неудачные попытки считывать так и удачные - неудачные см error http://jquery-docs.ru/Ajax/jQuery.ajax/#toptions считываете в глобальную переменную неудачные и обнуляете её при удачных, для очереди - при любом исходе(с проверкой флага удачности) запускаете по концу предыдущего запроса-следущий( желательно через таймер с маленькой задержкой, аргументы для запуска следующего запроса берете из стека(заготовленного ранее) аргументов. |
> до тех пор, пока не кончится число попыток, либо не будет возвращен корректный ответ.
Под корректным ответом я имею ввиду не плохой ответ сервера, а вот что: var req = $.ajax({..., success: function(data){ if (!data['is_ready']){ // Тут надо сделать магию, читайте ниже } } }); $.when(req).fail(function(){ alert('Если вы это видите, магия произошла!'); }); Возможно ли это вообще? > исходе(с проверкой флага удачности) запускаете по концу предыдущего запроса-следущий( желательно через таймер с маленькой задержкой, аргументы для запуска следующего запроса берете из стека(заготовленного ранее) аргументов. А вы код на gist вообще смотрели? Там вроде типа того и написано. |
Цитата:
|
Цитата:
есть еще нюанс - но позже |
У меня получилось решить задачу, код можно глядеть тут:
https://gist.github.com/3059545 Вся фишка была в передаче dfd в новую задачу. |
Epolypero,
Цитата:
base_url=base_url+'?'+Math.random(); Посколь в Ие повторные запросы (а это востребовано при меняющемся контенте) безбожно кешируются |
У $.ajax уже стоит cache: false, или я что-то не понял?
|
в старых Ие (до 8)
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 18:37. |