Комментарии 41
Спасибо за статью! Заметил небольшую опечатку: кажется, не hqxhr, а jqxhr.
Спасибо, аккуратно и, главное, полезно.
Отличная обёртка над $.Deferred()
Самими Deferred не очень удобно пользоваться, а так — красота.
Спасибо.
Самими Deferred не очень удобно пользоваться, а так — красота.
Спасибо.
Дмитрий, Вы как всегда великолепны! Ваши идеи меня поражают!
А можно в водопад добавлять методы из разных мест?
То есть не сразу
$.waterfall(func1, func2, .., funcN),
а, скажем,
var waterfall = $.waterfall(func1);
waterfall.push(func2);
То есть не сразу
$.waterfall(func1, func2, .., funcN),
а, скажем,
var waterfall = $.waterfall(func1);
waterfall.push(func2);
Нет, он сразу начинает водопадить
лучще сначала собрать их в массив а потом apply
лучще сначала собрать их в массив а потом apply
К слову, как раз искал для что-то подобное, но не нашёл. Может я просто не совсем понял как работает $.Deferred.
В итоге написал такой микро-плагинчик.
Может знаете, есть уже что-то готовое?
В итоге написал такой микро-плагинчик.
Может знаете, есть уже что-то готовое?
А можно waterfall реализовать стандартными средствами:
$.when.apply(this, [очередь запросов]).then(resultArray){
//resultArray - коллекция результатов от всех запросов
}
Думал увидеть анимированный водопад на jQuerry. Обломался. =)
Я сделал немного проще, но и функционал поменьше.
сделал отдельный класс для учета запросов, когда идет запрос, в классе инкрементируетя счетчик, когда он заканчивается, декрементируется, и ему можно добавить некую функцию (или несколько) которые выполнятся если счетчик будет равен 0
В отличии от Вашего способа я не могу видеть предидущие результаты так просто, но зато я могу выполнять запросы когда угодно и откуда угодно и буду иметь гарантию что финальная функция выполнится именно когда все запросы (с момента ее добавления) выполнятся, мне этот момент просто важней был =)
сделал отдельный класс для учета запросов, когда идет запрос, в классе инкрементируетя счетчик, когда он заканчивается, декрементируется, и ему можно добавить некую функцию (или несколько) которые выполнятся если счетчик будет равен 0
В отличии от Вашего способа я не могу видеть предидущие результаты так просто, но зато я могу выполнять запросы когда угодно и откуда угодно и буду иметь гарантию что финальная функция выполнится именно когда все запросы (с момента ее добавления) выполнятся, мне этот момент просто важней был =)
Я тоже реализовал сам себе уже давно похожий механизм. Только я использую рекурсию. Суть моего метода в том, что подготавливается сначала стек объектов в той последовательности в какой надо выполнить запросы. И запускается рекурсия от этого массива. Рекурсия простая: берётся первый элемент из стека и делается ajax, в success функции удаляется первый элемент и вызывается рекурсивно снова. Таким образом весь стек выполнится исключительно после success выполнения предыдущего запроса. Плюс я уже её эту свою систему расширил и унифицировал для использования в других проектах.
Разве api.jquery.com/category/deferred-object/ не дает такой же функционал?
Онлайн демку бы.
Код на гитхабе увидел, но возможно ли там посмотреть результат без регистрации?
Я то скачал, посмотрел, но регистрироваться неудобно, думаю.
А посмотреть хочется всем.
Ну это мое имхо, опять ничего по делу не сказал. =)
Код на гитхабе увидел, но возможно ли там посмотреть результат без регистрации?
Я то скачал, посмотрел, но регистрироваться неудобно, думаю.
А посмотреть хочется всем.
Ну это мое имхо, опять ничего по делу не сказал. =)
Там в демке ничего особенного, скачайте и зайдите в папку example
Смотрите, а с Each() будет работать ваш плагин?
Ну, я сделал бы кактотак:
var funcs = []
$('div').each(function() {
funcs.push(function() {
return $.ajax(...)
})
})
$.waterfall.apply(null, funcs);
/offtop
А расскажите мне, каким макаром можно вызвать окно сохранения файла, при асинхронным его запросе? :)
Я (не)много гуглил на эту тему… некоторая расплывчатая информация гласит о том, что заголовки отдаваемые сервером на скачивание файла, не действуют при аякс запросе, и это мня смущает, дело в том, что содержимое файла приходит, а сохранить его на компе не получается, вот бы придумать как решить эту проблемку?=\
А расскажите мне, каким макаром можно вызвать окно сохранения файла, при асинхронным его запросе? :)
Я (не)много гуглил на эту тему… некоторая расплывчатая информация гласит о том, что заголовки отдаваемые сервером на скачивание файла, не действуют при аякс запросе, и это мня смущает, дело в том, что содержимое файла приходит, а сохранить его на компе не получается, вот бы придумать как решить эту проблемку?=\
Вот тут раздел «Загрузка и сохранение файла в HTML5 File System»
Cсылку съело :( habrahabr.ru/blogs/javascript/120917/
фф 4, возможно webkit, еще не копал эту тему (возможно на днях придется)
а применять или нет — это много от чего зависит…
а применять или нет — это много от чего зависит…
Замечательно, Дмитрий!
Запишите, пожалуйста, на свой счет, как минимум, одно спасенное туловище.
Спасибо ;)
Запишите, пожалуйста, на свой счет, как минимум, одно спасенное туловище.
Спасибо ;)
Хотелось бы ещё узнать более подробное описание отличий от $.when() и особенно от deferred.pipe(). Насколько я понял, с deferred.pipe() очень много схожего (как минимум, последовательный вызов нескольких ajax-запросов).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
jQuery.waterfall. Небольшая полезняшка