Pull to refresh

Comments 41

Спасибо за статью! Заметил небольшую опечатку: кажется, не hqxhr, а jqxhr.
Спасибо, поправил
Спасибо, аккуратно и, главное, полезно.
Отличная обёртка над $.Deferred()

Самими Deferred не очень удобно пользоваться, а так — красота.

Спасибо.
Вы просто не умеете их готовить :)
Deferred — потрясающий способ контроля асинхронности
Возможно вы правы.
Были отличные статьи (раз, два) но как-то у меня с ним не сложилось…
Во второй статье раздел «Создание своего Deferred поведения» неплохо иллюстрирует основную идею.
А, вообще, это самому попробовать, тогда войдете во вкус :)
Я так понимаю, что этот же плагин можно использовать не только для jXHR объектов, а любых других асинхронных вещей.

Было бы отлично получить такой пример.
Просто передайте ей функции, которые возвращают Deferred
Дмитрий, Вы как всегда великолепны! Ваши идеи меня поражают!
Василий, вы меня смутили :)
А можно в водопад добавлять методы из разных мест?
То есть не сразу
$.waterfall(func1, func2, .., funcN),
а, скажем,
var waterfall = $.waterfall(func1);
waterfall.push(func2);
Нет, он сразу начинает водопадить
лучще сначала собрать их в массив а потом apply
К слову, как раз искал для что-то подобное, но не нашёл. Может я просто не совсем понял как работает $.Deferred.
В итоге написал такой микро-плагинчик.

Может знаете, есть уже что-то готовое?
А можно waterfall реализовать стандартными средствами:
$.when.apply(this, [очередь запросов]).then(resultArray){
//resultArray - коллекция результатов от всех запросов
}
Насколько я понимаю when начнет сразу выполнять все запросы, а нам нужно, чтобы каждый запрос начинался, когда завершится предыдущий. Этакая синхронная ассинхронность
Сорри, не внимательно прочитал пост
Думал увидеть анимированный водопад на jQuerry. Обломался. =)
Я сделал немного проще, но и функционал поменьше.
сделал отдельный класс для учета запросов, когда идет запрос, в классе инкрементируетя счетчик, когда он заканчивается, декрементируется, и ему можно добавить некую функцию (или несколько) которые выполнятся если счетчик будет равен 0
В отличии от Вашего способа я не могу видеть предидущие результаты так просто, но зато я могу выполнять запросы когда угодно и откуда угодно и буду иметь гарантию что финальная функция выполнится именно когда все запросы (с момента ее добавления) выполнятся, мне этот момент просто важней был =)
Ну у вас немного другая задача.
Я тоже реализовал сам себе уже давно похожий механизм. Только я использую рекурсию. Суть моего метода в том, что подготавливается сначала стек объектов в той последовательности в какой надо выполнить запросы. И запускается рекурсия от этого массива. Рекурсия простая: берётся первый элемент из стека и делается ajax, в success функции удаляется первый элемент и вызывается рекурсивно снова. Таким образом весь стек выполнится исключительно после success выполнения предыдущего запроса. Плюс я уже её эту свою систему расширил и унифицировал для использования в других проектах.
Онлайн демку бы.
Код на гитхабе увидел, но возможно ли там посмотреть результат без регистрации?
Я то скачал, посмотрел, но регистрироваться неудобно, думаю.
А посмотреть хочется всем.
Ну это мое имхо, опять ничего по делу не сказал. =)
Там в демке ничего особенного, скачайте и зайдите в папку example
не понял вопрос :(
$('div').each(function(i) {

jQuery.ajax({
});

});

и мне, например, нужно, чтобы переход к следующему диву был после того, как был завершен запрос через jquery.ajax.

И в конце, когда все дивы перебрали выполнялось определенное действие.
Ну, я сделал бы кактотак:
var funcs = []

$('div').each(function() {
    funcs.push(function() {
        return $.ajax(...)
    })
})

$.waterfall.apply(null, funcs);
Благодарю Вас, я воспользуюсь вашим плагином. Если разрешите, в случае возникновения вопросов, можно ли будет к Вам обратится в личку?
Один мой старый знакомый говаривал — «Делиться знаниями — 'священная корова' IT». Надеюсь он читает хабр…
/offtop
А расскажите мне, каким макаром можно вызвать окно сохранения файла, при асинхронным его запросе? :)

Я (не)много гуглил на эту тему… некоторая расплывчатая информация гласит о том, что заголовки отдаваемые сервером на скачивание файла, не действуют при аякс запросе, и это мня смущает, дело в том, что содержимое файла приходит, а сохранить его на компе не получается, вот бы придумать как решить эту проблемку?=\
используй iframe транспорт
Вот тут раздел «Загрузка и сохранение файла в HTML5 File System»
Да, замечательно, только стоит ли сейчас это применять, сколькими браузерами оно поддерживается… Chrome?
фф 4, возможно webkit, еще не копал эту тему (возможно на днях придется)
а применять или нет — это много от чего зависит…
Замечательно, Дмитрий!
Запишите, пожалуйста, на свой счет, как минимум, одно спасенное туловище.
Спасибо ;)
ээээ…
записал. 0_о
Хотелось бы ещё узнать более подробное описание отличий от $.when() и особенно от deferred.pipe(). Насколько я понял, с deferred.pipe() очень много схожего (как минимум, последовательный вызов нескольких ajax-запросов).
Главное отличие, что функции-аргументы вызываются по очереди — следующая только после завершения предыдущей. Так же они получают результаты всех ранее вызванных функций. Но в отличие от пайпов, они не фильтруют/изменяют чужие значения. Думаю, что на пайпах можно было бы это реализовать…
Sign up to leave a comment.

Articles